Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对于每个GridviewRow循环,使用where子句?_Asp.net_Vb.net_Gridview_For Loop_Linq - Fatal编程技术网

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

Asp.net 对于每个GridviewRow循环,使用where子句?,asp.net,vb.net,gridview,for-loop,linq,Asp.net,Vb.net,Gridview,For Loop,Linq,有没有更简单的方法来使用代码: For Each gvRow As GridViewRow In gvGridviewExample.Rows If gvRow.RowType = DataControlRowType.DataRow Then 'Do Something End If Next 例如,当使用iEnumerable时,理论上(伪代码样式)添加: 我只是想知道是否有一种更简单的编码方法 谢谢 Firstcape除了您的第一个代码片段实际上非常简单和

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

For Each gvRow As GridViewRow In gvGridviewExample.Rows
    If gvRow.RowType = DataControlRowType.DataRow Then
        'Do Something
    End If
Next
例如,当使用iEnumerable时,理论上(伪代码样式)添加:

我只是想知道是否有一种更简单的编码方法

谢谢


Firstcape

除了您的第一个代码片段实际上非常简单和清晰之外,
GridView
Rows
属性只返回数据行
DataRows。所以你根本不需要检查类型

Rows
属性(集合)用于将数据行存储在 GridView控件

仅限RowType属性设置为的行
DataControlRowType.DataRow
存储在Rows集合中。这个 表示页眉、页脚和寻呼机行的GridViewRow对象 不包括在集合中


在诸如
RowCreated
RowDataBound
之类的事件中,只能有不同的类型。如果您想访问这些事件之外的页眉、页脚或寻呼机,您可以使用
GridView
的相应属性,如
HeaderRow
FooterRow
,除了Tim的答案(对于您的具体情况100%正确)之外,您还可以在类似情况下使用,即,当您只想迭代所有可见行时:

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


由于
GridView.Rows
只返回带有
DataControlRowType.DataRow
的行,因此
Where
是多余的(这就是我回答的全部要点)。
ForEach
不会编译,因为它是
List(Of t)
中的一个方法,但是
Where
返回一个
IEnumerable(Of t)
。之前您需要一个
ToList
。但这是在浪费内存,因为一个简单的
foreach
可以完美地工作。在这种情况下,你是对的,这就是为什么你得到了我的支持。我只是想添加这种可能性,以解决
行类型
不是
中的标准的情况,如果。。。然后
语句。您已经编辑了您的评论,我已经更新了我的答案;-)要使其编译,还必须使用
gvGridViewExample.Rows.cast(GridViewRow的)(
Rows
属性转换为
IEnumerable(GridViewRow的)
。我不想吹毛求疵,但你可以看到,为了能够做一些毫无用处的事情,付出了巨大的努力;)但是已经实现了
IEnumerable
,不是吗?!不,它实现了
IEnumerable
。这就是为什么需要强制转换以及为什么还需要在
foreach
中指定类型的原因。因此,以下foreach中的行的类型为
Object
而非
GridViewRow
用于GridView1中的每一行。下一行
必须指定隐式转换的类型:
用于GridView1中的每一行作为GridViewRow。下一行
我理解它非常简单明了,我想知道是否还有其他帮助,但正如您所指出的,它只收集数据行。谢谢你的帮助!
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