asp.net|web|建立|動態|控制項
摘要:web設計中,有很多場合,頁面的控制項要動態建立甚至只能動態建立,這樣可以增加頁面的靈活性,但是給程式員帶來了一些麻煩,比如要使用動態建立的控制項,怎麼使用,都是要求解決的問題,本文基於asp.net,簡要介紹了頁面的控制項如何動態建立,同時也介紹了怎麼使用這些動態建立的控制項的方法。
前言:
自從Microsoft在2000年推出了.net framework以來,給基於internet編程的程式員帶來了巨大的福音,.net framework大大簡化了web頁面設計的繁雜,可見即可得的頁面效果大大簡化了頁面設計程式員的工作任務,code behind技術將頁面與代碼分離,減少了web頁面的無序狀態,其中大量可以複用的控制項可以無縫的被瀏覽器使用,由於互連網上95%的瀏覽器均是Microsoft的Internet Explorer,程式員大可以放心的使用這些控制項而不用擔心瀏覽器的相容性,本文從Microsoft的.net和com控制項開始,給出具體例子說明如何在頁面上動態建立控制項,以及怎麼來使用這些動態建立的控制項。其中具體使用的語言是vb.net。
1. Microsoft控制項
目前用於瀏覽器的動態資料瀏覽方式主要有以下兩種,(1).使用java applet。(2).使用可以在瀏覽器中運用的控制項。兩種方法各有利弊,使用java applet,頁面執行較慢,編程複雜,可複用性不大,這種方式現在使用較少;越來越多的程式員較傾向於使用控制項。其中我們在web中大多數時候是使用到.net 的web control和html control以及一些資料操作控制項。
一般的,在web設計中,通常使用拖拽的方式,將空間放置到頁面,然後設定屬性就可以了,然後再背景程式中編程使用就可以了。這種方式操作起來很方便,可見即可得,同時引用這些放置好的控制項也很方便,但是在有些情況下,我們卻不得不要動態建立控制項,比如對一一個資料庫中的某一些欄位,對於不同身份的使用者,見到的欄位數目是不一樣的;還有就是對於不同身份的使用者對於某一控制項的使能狀態是不一樣的,我們不能再頁面設計時採用一個標準,最好的方式就是動態建立控制項,對於不同的情況,通過程式來控制,放置在頁面上的控制項的數目也通過程式來控制。然後通過程式來引用這些建立好的控制項。
2. 建立控制項
對於程式員來說,用例子說話是最好的方式來提供解決方案,我將在頁面上動態放置一些標籤(label)和文字框(textbox),這些文字框裡頭放置的是從dataset取到的資料,同時我把這些文字框放置到一個表格的相應儲存格裡,可以實現有序的放置,首先在頁面添加一個table。然後根據需要建立不同的列數和行數,如下為動態建立這些文字框的代碼:
Dim i As Integer
For i = 0 To IntRowCount - 1
Dim r As TableRow = New TableRow()
Dim c1 As TableCell = New TableCell()
Dim myLabel1 As Label = New Label()
‘這裡設定該label的ID,對於不同的label,必須設定成不同的ID,我這裡設定成首碼lbl1加欄位名的組合,例如lbl1xlmc等。
myLabel1.ID = "Lbl1" & Trim(OleDsField.Tables("Field").Rows(i).Item("column_name")).ToString()
‘下面的條件陳述式是為了判斷資料庫中在欄位的值是否為空白,根據條件賦予label不同的文本。
If OleDsField.Tables("Field").Rows(i).Item("column_title").GetType.ToString = "System.DBNull" Then
myLabel1.Text = ""
Else
myLabel1.Text = Trim(OleDsField.Tables("Field").Rows(i).Item("column_title"))
End If
c1.Controls.Add(myLabel1)
r.Cells.Add(c1)
Dim c2 As TableCell = New TableCell()
Dim mytextbox As TextBox = New TextBox()
mytextbox.ID = "Txt" & Trim(OleDsField.Tables("Field").Rows(i).Item("column_name")).ToString()
If OleDsResult.Tables("Result").Rows(0).Item(i).GetType.ToString = "System.DBNull" Then
mytextbox.Text = ""
Else
mytextbox.Text = Trim(OleDsResult.Tables("Result").Rows(0).Item(i))
End If
If Trim(OleDsField.Tables("Field").Rows(i).Item("column_enable")) = "是" Then
mytextbox.Enabled = True
Else
mytextbox.Enabled = False
End If
c2.Controls.Add(mytextbox)
r.Cells.Add(c2)
Table3.Rows.Add(r)
Next
這樣就成功地添加了兩列到表裡,至於行數由變數IntRowCount決定,其中IntRowCount為取資料庫時得到的記錄的行數
3. 使用動態建立的控制項
使用這些控制項時,首先必須要知道這些控制項的ID,對於上文所說的這些控制項,由於ID名稱不定,使用時必須也要根據條件來使用。比如我要找到相應的文字框的ID,就用以下代碼可以實現:
Dim txt As TextBox
txt = Me.FindControl("txt" & OleDsField.Tables("Field").Rows(i).Item("column_name"))
這樣就找到了要使用的文字框的這個控制項,然後就可以使用相應功能。
4. 小結
使用動態建立控制項時,痛點在於怎麼來操作這些動態建立的控制項。本文給出了代碼,本文例子在.net 2002+windows 2000下調試通過。