摘要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 下调试通过同时也给出了web设计的一个方法各位可以通过l_yx@sinacomcn和我联系欢迎批评指正