0

所有,我正在使用该事件来RowCreated填充每个Row. GridView但是我发现每当我单击任何可能触发页面回发的服务器控件时都会触发RowCreated事件。这将导致不可用(null)的问题。GridViewAsp.net Buttone.Row.DataItem

代码如下所示。

    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.
        }         
    }

而且我确信我没有绑定任何东西DataTableList<T>使用GridViewwhen 回发。经过研究。我还发现如果我将代码移动到RowDataBound事件。一切都好。问题消失了。我只是不知道为什么。希望可以有人帮帮我。谢谢。

4

2 回答 2

2

根据MSDN

在呈现 GridView 控件之前,必须为控件中的每一行创建一个 GridViewRow 对象。在创建 GridView 控件中的每一行时引发 RowCreated 事件。这使您能够提供一种事件处理方法,该方法在此事件发生时执行自定义例程,例如将自定义内容添加到行中。

还要检查下面的链接,解释它发生的原因:

回发后 GridView 事件意外引发

于 2013-07-17T08:50:38.557 回答
1

RowCreated 专注于解析 Gridview 行的定义并创建 Gridview 行的控制结构,

RowDataBound 专注于将数据绑定到在 RowCreated 中创建的行的控件。

此外,在初始化和回发情况下都会自动调用 RowCreated,但仅在调用 DataBind 时才会调用 RowDataBound。

每次您的网格有绑定数据时,都会调用 RowCreated 事件。

您是否在页面加载时绑定了gridview?如果这是您的情况,则 RowCreated 事件将在每次回发中触发。为避免这种情况,请检查 !IsPostback 以控制它并管理您的 gridview 绑定。在大多数情况下,每个人(包括 Microsoft)都推荐使用 RowDataBound 事件而不是 RowCreated。

希望对您有所帮助:)

于 2013-07-17T08:23:41.957 回答