2010-08-17 2 views
0

Эй, ребята, у меня есть GridView ASP.NET, привязанный к DataView, который содержит DataTable. Я не использую DataAdapter.Обновление DataTable?

Я хочу, чтобы обновить строку в моей 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 
... 

Как это исправить, то, что я сделал не так?

+0

Вы уверены, что Сэмми E не перезаписывать другую запись? или ваш общий счетчик строк также увеличился? – Jeroen

+0

Я уверен, что запись не была перезаписана, а количество строк увеличено на 1. –

ответ

1

Было много странных вещей.

Суть всех плохих вещей была DataView - поскольку вещи были переупорядочены, индекс GridView и индекс DataTable в DataView не совпадали. DataTable должен был быть зациклен до тех пор, пока не будет найдена правильная только отредактированная запись.

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; 
Смежные вопросы