2010-09-14 1 views
1

У меня есть Gridview с этими параметрами:asp.net GridView не обновляется должным образом

<asp:GridView runat="server" ID="ItemGrid" CssClass="Grid" 
       AutoGenerateColumns="false" 
       AutoGenerateDeleteButton="true" OnRowDeleting="RowDeleting" 
       AutoGenerateEditButton="true" onRowEditing="RowEdit" 
       OnRowCancelingEdit="CancelRowEdit" onRowUpdating="RowUpdating" 
       DataKeyNames="Item_ID"> 
      <Columns> 
       <asp:BoundField HeaderText="Item" DataField="Item"/> 
       <asp:BoundField HeaderText="Family" DataField="Family"/> 
       <asp:BoundField HeaderText="Structure" DataField="Structure"/> 
       <asp:BoundField HeaderText="Updated" ReadOnly="true" DataFormatString="{0:d}" DataField="Updated"/> 
      </Columns> 
</asp:GridView> 

Об обновлении его называет:

protected void RowUpdating(object sender, GridViewUpdateEventArgs e){ 
    int Item_ID = (int)this.ItemGrid.DataKeys[e.RowIndex][0]; 
//Problem is something right here: 
    string Item = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text; 
    string Family = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[2].Controls[0]).Text; 
    string Structure = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[3].Controls[0]).Text; 

    ItemTableAdapter taItem = new ItemTableAdapter(); 
    taItem.UpdateItem(Item, Family, Structure, DateTime.Now, Item_ID); 
    //just a <asp:Label> for seeing some output. 
    Alert.Text= string.Format("Item:{0}Family:{1}Structure:{2}",Item,Family,Structure); 

    this.ItemGrid.EditIndex = -1; 
    dataBind();   
} 

Он генерирует Update/Редактировать/Удалить кнопки, мой Функция удаления работает точно так, как я хочу, и кнопка «Редактировать» генерирует редактируемые текстовые поля, как следует.

Моя проблема в части обновления, строки Item, Family, Structure получают старые значения, а не новые значения, которые я помещаю в сгенерированные текстовые поля.
Если я жестко кодирую значения, они обновляются в базе данных, а DateTime.Now всегда правильно обновляется в базе данных, поэтому запрос обновления работает.

Я смотрел этот/читающий форумы, проверяя вещи на пару дней. Я уверен, что я просто пропустил что-то простое, что я упустил.

Спасибо за любую помощь.

Редактировать: Ответ получен, но для тех, кому это было интересно, это мои данныеBind();

protected void dataBind() 
{ 
    ItemTableAdapter taItem = new ItemTableAdapter(); 
    this.ItemGrid.DataSource = taItem.GetActive(); 
    this.ItemGrid.DataBind(); 
} 
+1

Пожалуйста, покажите, где/как вы связывание данных, я подозреваю, вы пересобираете данные перед вызовом rowupdating, так что это просто повторное использование старых данных. –

+1

Какова ваша функция 'dataBind();'? –

+0

Что вы сделали, чтобы исправить эту проблему, имеющую ту же проблему – ONYX

ответ

1

Вы повторно связываете свой GridView по обратной связи по ошибке? Вы должны только получать данные из базы данных на начальной загрузке:

if (!IsPostBack) 
{ 
    Gridview1.Datasource = BLL.SomeClass.Load(SomeRecordId); 
    GridView1.DataBind(); 
} 
+0

Да, это все. В настоящее время я буду отмечать его как правильное после 10 минут. Подождите. – 182764125216

1

RowUpdating и RowUpdated огонь в разное время. Смотрите, если это не ваша проблема.

+0

Да, я проверил это уже. У меня изначально был неправильный вчера, но я уже это исправил. Спасибо за совет. – 182764125216

1

Попробуйте использовать следующий метод для получения новых значений:

//string Item = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text; 
//string Family = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[2].Controls[0]).Text; 
//string Structure = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[3].Controls[0]).Text; 

string Item = e.NewValues["Item"].ToString(); 
string Family = e.NewValues["Family"].ToString(); 
string Structure = e.NewValues["Structure"].ToString(); 
+0

Я попробовал это еще до того, как мой e.NewValues.Count вернулся 0, поэтому я переключился на этот путь, который я нашел в примере библиотеки MSDN. – 182764125216