asp.net GridView не обновляется должным образом - PullRequest
1 голос
/ 14 сентября 2010

У меня есть 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();        
}

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

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

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

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

Edit: Ответ получен, но для тех, кому было интересно, это мой dataBind ();

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

Ответы [ 3 ]

1 голос
/ 14 сентября 2010

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

if (!IsPostBack)
{
    Gridview1.Datasource = BLL.SomeClass.Load(SomeRecordId);
    GridView1.DataBind();
}
1 голос
/ 14 сентября 2010

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

//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();
1 голос
/ 14 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...