0

我有一个看起来像这样的 GridView:

<asp:GridView ID="MyGridView" 
              runat="server" 
              AutoGenerateColumns="False" 
              OnRowDataBound="MyGridView_RowDataBound" >
   <asp:HyperLinkField . . . . . bla bla/>
   <asp:BoundField . . . . . . . bla bla/>
</asp:GridView>

我的事件处理程序 (MyGridView_RowDataBound) 实际上如下所示:

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType != DataControlRowType.DataRow)
     return;

   // do stuff here
}

出于某种原因,我的代码永远不会到达“//在这里做事”这一行。它没有通过数据行检查,因为OnRowDataBound只为我的标题行触发。

我已经验证了数据行是通过使用MyGridView_RowCreated处理程序创建的。绑定也很明显,因为当我运行网站时,我可以看到我的数据库中的行出现了。最重要的是,我已经验证了该MyGridView.DataBind()语句正在运行。

我忽略了什么导致我的事件处理程序不为数据行触发?

编辑:经过进一步检查,看起来GridView.DataBound事件根本没有触发,所以我不能使用DataBound然后循环遍历行。

4

2 回答 2

1

在绑定过程中捕获的代码深处发生了异常。因为绑定没有完全完成,所以OnRowDataBound从来没有为任何数据行调用过。似乎绑定成功完成的原因是因为我期望有结果的所有单元格都有它们(因为绑定是部分完成的),而有问题的单元格没有达到预期的结果。修复此异常后,OnRowDataBound按预期为每个数据行触发。

于 2012-08-29T23:38:58.600 回答
0

让它== 现在这将为数据行触发

if (e.Row.RowType == DataControlRowType.DataRow)

在gridview行上循环的替代方式

foreach (GridViewRow oItem in GridView1.Rows)
 {
    // do stuff here
    string value = oItem.Cells[0].Text;

 }
于 2012-08-28T10:00:43.050 回答