对于每个GridviewRow循环,使用where子句?

时间:2013-04-19 09:19:15

标签: asp.net vb.net gridview for-loop

有没有更简单的方法来使用代码:

For Each gvRow As GridViewRow In gvGridviewExample.Rows
    If gvRow.RowType = DataControlRowType.DataRow Then
        'Do Something
    End If
Next

例如在使用iEnumerable时你理论上(伪代码样式)添加一个:

gvGridviewExample.Where(Function(chR) chR.Row = DataRow)

我只是想知道是否有更简单的编码方式?

谢谢,

Firstcape

2 个答案:

答案 0 :(得分:3)

除了您的第一个片段实际 非常简单明了之外,Rows的{​​{1}}属性仅返回 GridView < / strong>即可。所以你根本不需要检查类型。

MSDN

  

DataRows属性(集合)用于存储数据行   GridView控件。

     

仅将RowType属性设置为的行   Rows存储在Rows集合中。该   GridViewRow对象,表示页眉,页脚和寻呼机行   不包括在集合中。

您只能在DataControlRowType.DataRowRowCreated等活动中使用不同的类型。如果您想要访问这些事件之外的页眉,页脚或寻呼机,您可以使用RowDataBound的相应属性,例如GridViewHeaderRow

答案 1 :(得分:0)

除了Tim的回答(对于您的具体情况100%正确),您可以在类似情况下使用,即当您只想迭代所有可见行时:

gvGridViewExample.Rows
    .Where(Function(r) r.Displayed = True)  ' Apply filter
    .ToList()
    .ForEach(Function(x) x.DoSomething())  ' Do something...

For Each row in gvGridViewExample.Rows.Where(Function(r) r.Displayed = True)
    row.DoSomething()
Next