日期:2014-05-19  浏览次数:20468 次

有几行代码不甚理解,还望指教!



代码如下:
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行的才是一样东西。