有几行代码不甚理解,还望指教!
代码如下:
1 Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
2 If e.Row.RowType = DataControlRowType.DataRow Then
3 If e.Row.RowIndex = GridView1.EditIndex Then
4 Dim rowItem As DataRowView = CType(e.Row.DataItem, DataRowView)
5 Dim userLevel As DropDownList = CType(e.Row.FindControl( "uUserLevel "), DropDownList)
6 If Not (rowItem( "UserLevel ") Is DBNull.Value) Then
7 userLevel.Items.FindByText(rowItem( "UserLevel ").ToString).Selected = True
8 End If
9 End If
10 End If
11 End Sub
我的理解是:
第2行: 如果该行的类型为数据(不是标题或者foot行),则继续
第3行: 如果该行在编辑模式下,即,如果该行不是在编辑状态下,则不继续
第4行:把该行的所有数据转换为DataRowView
第6行:这个不太理解,先定义的rowItem,然后才有UserLevel,系统怎么知道rowItem有个子集UserLevel?
第7行:我理解的rowItem( "UserLevel ")应该是个list集合,为什么集合也能ToString?
------解决方案--------------------第6行中 "UserLevel "根据实际情况而变化,你如果连这个都不知道,你还写什么程序啊?
第7行中FindByText后返回的是个Item对象,当然可以ToString了,其余行的理解基本差不多。
------解决方案--------------------DataRowView的两个方法(函数、属性方法):
Public Default Property Item(ByVal ndx As Integer) As Object
Public Default Property Item(ByVal [property] As String) As Object
rowItem不是什么list集合,rowItem(...)也不是取集合中的元素。它是默认的方法。写rowItem( "abc ")被vb.net编译器翻译为rowItem.Item( "abc ")。同样,rowItem( "UserLevel ")返回的是一个object对象。
------解决方案--------------------请去每个不懂语句查查帮助,不可能所有人都帮你把所有点一一告诉你
vs帮助基本能帮到你
老师领你如门,修行于个人
------解决方案--------------------根据实际的需要有可能会不一样
上面这个例子的意思是先看UserLevel的内容是不是NULL,如果不是的话到DropDownList中查找相应的值,然后选中。
------解决方案--------------------第7行跟第5行的才是一样东西。