为什么OnRowDataBound只触发我的标题而不是我的数据行?

时间:2012-08-28 01:17:51

标签: c# asp.net gridview

我有一个看起来像这样的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
}

出于某种原因,我的代码永远不会到达&#39; //在这里做的事情&#39;线。它没有通过数据行检查,因为OnRowDataBound仅针对我的标题行触发。

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

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

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

2 个答案:

答案 0 :(得分:1)

在绑定过程中捕获的代码深处发生了异常。由于绑定未完全完成,因此从未为任何数据行调用OnRowDataBound。看起来成功完成绑定的原因是因为我预期所有具有结果的细胞都具有它们(因为结合部分完成),并且有问题的细胞没有达到预期的结果。修复此异常后,OnRowDataBound按预期为每个数据行触发。

答案 1 :(得分:0)

让它 == 现在这将触发datarow

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

替代方式循环在gridview行

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

 }