2013-04-22 2 views
0

Я хочу, чтобы обновить строку в GridView с этим кодом, но после редактирования GridView не изменения:GridView значения строк не изменилось после обновления

protected void res_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     //Retrieve the table from the session object. 
     DataTable dt = (DataTable)Session["dt"]; 
     GridViewRow row =res.Rows[e.RowIndex]; 
     dt.Rows[row.DataItemIndex]["name"] = ((TextBox)(row.Cells[6].Controls[0])).Text; 
     dt.Rows[row.DataItemIndex]["dewey"] = ((TextBox)(row.Cells[5].Controls[0])).Text; 
     *dt.Rows[row.DataItemIndex]["subject"] = ((TextBox)(row.Cells[4].Controls[0])).Text; 
     Session["dt"] = dt; 
     res.EditIndex = -1; 
     res.DataSource = dt; 
     res.DataBind(); 
    } 

мой Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable dt; 
     if (!IsPostBack) 
     { 
      dt= Converter.ListBooks(new classes.Book().GetAll()); 
      Session["dt"] = dt; 
      res.DataSource = dt; 
      res.DataBind(); 
     } 
     else 
     { 
      dt=(DataTable)Session["dt"]; 
      res.DataSource = dt; 
      res.DataBind(); 
     } 

    } 

, например, я изменил линию, есть * к этому:

dt.Rows[row.DataItemIndex]["subject"] = "tx"; 

и после редактирования ubject "изменен на" tx ", поэтому я не знаю, почему ((TextBox)(row.Cells[4].Controls[0])).Text возвращает текст TextBox перед редактированием?

+0

удалите часть else в page_load, вы действительно не должны ее связывать. пожалуйста, привяжите gridview в событиях, которые повышают обратную связь – naveen

ответ

1

Потому что вы» re call DataBind(); метод каждый раз, когда страница обновляется (POST или GET), позвольте мне объяснить больше, если пользователь поместил новое значение в TextBox и нажал кнопку обновления, чтобы вызвать res_RowUpdating даже Page_Load будет запускать и связывать Gird с значениями базы данных, которые старые значения и пренебречь введенным пользователем значением.

+0

Я удалил 'res.DataBind()' в 'else', а затем он сработал. –

0

Возможно, изменения выполнены, но форма не обновляется.

Попробуйте установить элемент управления gridview внутри панели управления Update и вызовите UpdatePanel.Update().

Когда вы работаете с веб-элементом управления, то, что вы видите, может отличаться от того, что на самом деле происходит из-за того, что изменения в данных не поддерживаются в уровне представления.

Чтобы решить эту «проблему», вы можете сделать обратную передачу (получение всего) всей страницы, но это похоже на убийство мухи с помощью базыки, потому что вам не нужно все, только что было обновлено, поэтому для этого есть несколько инструментов, которые позволяют выполнять частичные обновления, например элемент управления AJAX: UpdatePanel.

Надеюсь, это поможет.

Update: позови AcceptChanges() метод на DataTable и удалить ветку еще на Page_Load после если (PostBack!)

+0

Это не моя проблема. Я изменил заголовок вопроса, который был неясным. –

+0

, пожалуйста, снова просмотрите вопрос, я обновил это. –

+0

Итак, ваша проблема теперь не в применении изменений, но получение текста из нескольких строк, которые вы хотите? – Javiere

0

Я думаю, вам просто нужно пересвязать сетке

0

Удалить else в вашем page_load.

Должно сделать это за вас.

Вы связываете сетку каждый раз, когда есть postback, который не требуется.

+0

Я сделал это, после редактирования, 'GridView' исчез. –

0

Вызвать AcceptChanges() метод DataTable, а затем связать GridView.

+0

Я попробовал, но ничего не изменилось. –

Смежные вопросы