GridView OnRowUpdating无法获取值

时间:2015-09-14 14:13:52

标签: c# asp.net gridview

我有一个GridView需要在每一行中都有一个可编辑的列。我已将其声明如下所示。

GridViewTest_OnRowUpdating

数据显示应该是。尝试编辑百分比值时出现问题。单击“更新”工作正常,单元格中的可编辑TextBox会显示,但是当修改了值并单击“更新”时,当GridViewUpdateEventArgs方法被点击时,对象发件人和 protected void GridViewTest_OnRowUpdating(object ASender, GridViewUpdateEventArgs AE) { PerformDataTableUpdate(ref TestGrid, AE); } 都是空的。该方法定义如下。

GridViewUpdateEventArgs

在上述方法中;对象ASender没有行,Page_load AE属性都是空的(键,NewValues,OlValues等)。 我确保GridView没有在Page_Load或其他任何地方反弹(当它进入和离开GridViewTest_OnRowUpdating时它是空的,并且当它在更新回发时命中{{1}}时仍然是空的。)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

使用GridView更新值时,需要设置DataKeyNames属性。一旦指定了这一点,Gridview就会使用唯一标识的键来更新/删除哪些行

DataKeyNames通常设置为表的主键,但我们不一定总是这样做。

MSDN说:

  

您必须设置DataKeyNames属性才能使GridView控件的自动更新和删除功能正常工作。这些关键字段的值将传递到数据源控件,以指定要更新或删除的行

编辑::

  

1。)GridViewUpdateEventArgs AE属性都是空的(Keys,NewValues,OlValues等)

现在有一个条件,即只有在使用DatakeyNames属性绑定数据时,GridView才会使用DataSourceID并填充OldNew值。这是设计的。

  

2。)对象ASender没有行

我怀疑这种情况正在发生,因为数据绑定到gridview没有以正确的方式完成。

以下是围绕此问题的一些常见讨论/解决方案::

1。)由于数据在运行时绑定到gridview,请确保按以下方式绑定它:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
       GridView1.DataSource = ds; // appropriate data source here
       GridView1.DataBind();
    }
}

为什么DataBind()采用上述方式? ::

  

点击"更新"按钮,Page_Load()事件在OnRowUpdating()事件之前被触发。因此,如果您使用IsPostback属性 MISS GridView将再次使用原始值(即OldValues)进行绑定(刷新)

这是必需的,以便在我们的onRowUpdating事件中获得我们之前提交的新值。

2。)从行获取值:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
   {
       GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
       TextBox FirstName= (TextBox)row.FindControl("txtFirstName");
   }