摘要web設計中
有很多場合
頁面的控件要動態創建甚至只能動態創建
這樣可以增加頁面的靈活性
但是給程序員帶來了一些麻煩
比如要使用動態創建的控件
怎麼使用
都是要求解決的問題
本文基於asp
net
簡要介紹了頁面的控件如何動態創建
同時也介紹了怎麼使用這些動態創建的控件的方法
前言
自從Microsoft在年推出了net framework以來給基於internet編程的程序員帶來了巨大的福音net framework大大簡化了web頁面設計的繁雜可見即可得的頁面效果大大簡化了頁面設計程序員的工作任務code behind技術將頁面與代碼分離減少了web頁面的無序狀態其中大量可以復用的控件可以無縫的被浏覽器使用由於互聯網上%的浏覽器均是Microsoft的Internet Explorer程序員大可以放心的使用這些控件而不用擔心浏覽器的兼容性本文從Microsoft的net和com控件開始給出具體例子說明如何在頁面上動態創建控件以及怎麼來使用這些動態創建的控件其中具體使用的語言是vbnet
Microsoft控件
目前用於浏覽器的動態數據浏覽方式主要有以下兩種()使用java applet()使用可以在浏覽器中運用的控件兩種方法各有利弊使用java applet頁面執行較慢編程復雜可復用性不大這種方式現在使用較少越來越多的程序員較傾向於使用控件其中我們在web中大多數時候是使用到net 的web control和html control以及一些數據操作控件
一般的在web設計中通常使用拖拽的方式將空間放置到頁面然後設置屬性就可以了然後再後台程序中編程使用就可以了這種方式操作起來很方便可見即可得同時引用這些放置好的控件也很方便但是在有些情況下我們卻不得不要動態創建控件比如對一一個數據庫中的某一些字段對於不同身份的用戶見到的字段數目是不一樣的還有就是對於不同身份的用戶對於某一控件的使能狀態是不一樣的我們不能再頁面設計時采用一個標准最好的方式就是動態創建控件對於不同的情況通過程序來控制放置在頁面上的控件的數目也通過程序來控制然後通過程序來引用這些創建好的控件
創建控件
對於程序員來說用例子說話是最好的方式來提供解決方案我將在頁面上動態的放置一些標簽(label)和文本框(textbox)這些文本框裡頭放置的是從dataset取到的數據同時我把這些文本框放置到一個表格的相應單元格裡可以實現有序的放置首先在頁面添加一個table然後根據需要創建不同的列數和行數如下為動態創建這些文本框的代碼
Dim i As Integer
For i = To IntRowCount
Dim r As TableRow = New TableRow()
Dim c As TableCell = New TableCell()
Dim myLabel As Label = New Label()
這裡設置該label的ID對於不同的label必須設置成不同的ID我這裡設置成前綴lbl加字段名的組合例如lblxlmc等
myLabelID = Lbl & Trim(OleDsFieldTables(Field)Rows(i)Item(column_name))ToString()
下面的條件語句是為了判斷數據庫中在字段的值是否為空根據條件賦予label不同的文本
If OleDsFieldTables(Field)Rows(i)Item(column_title)GetTypeToString = SystemDBNull Then
myLabelText =
Else
myLabelText = Trim(OleDsFieldTables(Field)Rows(i)Item(column_title))
End If
cControlsAdd(myLabel)
rCellsAdd(c)
Dim c As TableCell = New TableCell()
Dim mytextbox As TextBox = New TextBox()
mytextboxID = Txt & Trim(OleDsFieldTables(Field)Rows(i)Item(column_name))ToString()
If OleDsResultTables(Result)Rows()Item(i)GetTypeToString = SystemDBNull Then
mytextboxText =
Else
mytextboxText = Trim(OleDsResultTables(Result)Rows()Item(i))
End If
If Trim(OleDsFieldTables(Field)Rows(i)Item(column_enable)) = 是 Then
mytextboxEnabled = True
Else
mytextboxEnabled = False
End If
cControlsAdd(mytextbox)
rCellsAdd(c)
TableRowsAdd(r)
Next
這樣就成功地添加了兩列到表裡至於行數由變量IntRowCount決定其中IntRowCount為取數據庫時得到的記錄的行數
使用動態創建的控件
使用這些控件時首先必須要知道這些控件的ID對於上文所說的這些控件由於ID名稱不定使用時必須也要根據條件來使用比如我要找到相應的文本框的ID就用以下代碼可以實現
Dim txt As TextBox
txt = MeFindControl(txt & OleDsFieldTables(Field)Rows(i)Item(column_name))
這樣就找到了要使用的文本框的這個控件然後就可以使用相應功能
小結
使用動態創建控件時難點在於怎麼來操作這些動態創建的控件本文給出了代碼本文例子在net +windows 下調試通過
From:http://tw.wingwit.com/Article/program/ASP/201311/21913.html