更新DataTable?

时间:2010-08-17 17:51:19

标签: asp.net gridview datatable

嘿伙计们,我有一个ASP.NET GridView绑定到一个包含DataTable的DataView。我没有使用DataAdapter。

我想更新DataTable中的一行,所以我这样做:

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
 {
    DataView dv = (DataView)Session["My_DataTable"];
    DataTable dt = dv.Table;
    int rowIndex = GridView1.Rows[e.RowIndex];
    dt.Rows[rowIndex]["FirstName"] = thenewfirstname;
    dt.Rows[rowIndex]["MI"] = thenewmi;
    dt.Rows[rowIndex]["LastName"] =thenewlastname;
    Session["My_DataTable"] = dv;
    //Reset the edit index.
    GridView1.EditIndex = -1;

    //Bind data to the GridView control.
    GridView1.DataSource = Session["My_DataTable"];
    GridView1.DataBind();
 }

底层的DataView / DataTable已正确更改,但GridView包含编辑前的旧行和编辑后的新行(即,它添加了一个带有新编辑的附加行!)。

例如,如果我们有:

...
Sammy S Samerson 
...

并将其更改为Sammy E Samerson gridview说:

...
Sammy S Samerson
Sammy E Samerson
...

我如何解决这个问题,我做错了什么?

2 个答案:

答案 0 :(得分:1)

发生了很多奇怪的事情。

所有Bad Things的要点都是DataView - 因为事情正在重新排序,GridView的索引和DataView中DataTable的索引不匹配。必须循环使用DataTable,直到找到正确的刚编辑的记录。

答案 1 :(得分:1)

您是否检查了编辑行的行索引? int rowIndex = GridView1.Rows [e.RowIndex];你可以直接使用e.RowIndex。

我的建议是使用表格的任何关键字段来获取行。

例如

DataRow[] customerRow = 
dataSet1.Tables["Customers"].Select("CustomerID = 'ALFKI'");

customerRow[0]["CompanyName"] = "Updated Company Name";
customerRow[0]["City"] = "Seattle";

您可以使用单元格位置获取行值。或者使用datakeynames 例如:

string courseid = GridView1.Rows[e.RowIndex].Cells[3].Text;