全部,我使用RowCreated
事件来填充Row
的每GridView
个内容。但是当我点击任何可能触发页面回发的服务器控件RowCreated
时,我发现GridView
事件Asp.net Button
被触发。
它会导致e.Row.DataItem
不可用的问题(null)。
代码如下所示。
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
SomeObject mapItem = (SomeObject)e.Row.DataItem;//DataItem is null when postback.
}
}
我确信在回发时我没有将DataTable
或List<T>
与GridView
绑定。
经过研究。我还发现是否将代码移动到RowDataBound
事件。一切都好。问题消失了。我只是不知道为什么。希望可以有人帮帮我。谢谢。
答案 0 :(得分:2)
根据MSDN,
在可以渲染GridView控件之前,必须使用GridViewRow对象 为控件中的每一行创建。 RowCreated事件被引发 何时创建GridView控件中的每一行。这使您能够 提供执行自定义例程的事件处理方法 在发生此事件时将自定义内容添加到行中。
另请查看以下链接,了解其发生的原因:
答案 1 :(得分:1)
RowCreated专注于解析Gridview行的定义并创建Gridview行的控制结构,
RowDataBound专注于绑定数据到RowCreated中创建的行控件。
在init和postback情况下也会自动调用RowCreated,但RowDataBound仅在调用DataBind时调用。
每次网格绑定数据时,RowCreated事件都会每次调用。
您是否在页面加载时绑定了gridview?如果是这种情况,则每次回发都会触发RowCreated事件。要避免这种情况,请检查!IsPostback来控制它并管理您的gridview绑定。在大多数情况下,每个人(包括Microsoft)都会使用RowDataBound事件代替RowCreated。
希望有所帮助:)