我有一个看起来像这样的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
然后循环遍历行。
答案 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;
}