GridView onRowUpdating事件访问textBox

时间:2017-10-20 10:53:15

标签: c# asp.net gridview

我遇到了奇怪的情况。 这是我的gridview

的ascx代码的一部分
<asp:gridview ID="grdBooks" class="grdBooks" runat="server" width="100%" DataKeyNames="RecId,RefAuthorsRecId,RefBooksTypeRecId" autogeneratecolumns="false" onDataBound="grdBooks_dataBound" onPreRender="grdBooks_preRender" onrowediting="grdBooks_RowEdit" onrowupdating="grbBooks_onRowUpdating" onrowupdated="grdBooks_onUpdated" autogenerateeditbutton="true" onrowcancelingedit="grdBooks_onCancelingEdit">
            <Columns>
                <asp:TemplateField HeaderText="Title">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtgrdTitle" runat="server" width="200px"></asp:TextBox>
                        <asp:Label ID="lblgrdTitle2" runat="server" visible="false" Text='<%# Eval("Title") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblgrdTitle" runat="server" Text='<%# Bind("Title") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>.....

这是“onRowEdit”和“onRowUpdating”的一部分

protected void grdBooks_RowEdit(object sender, GridViewEditEventArgs e)
{
    grdBooks.EditIndex = e.NewEditIndex;
    grdBooks.DataSource = book;
    grdBooks.DataBind();
    TextBox txtTitle = grdBooks.Rows[e.NewEditIndex].FindControl("txtgrdTitle") as TextBox;
    Label lblTitle = grdBooks.Rows[e.NewEditIndex].FindControl("lblgrdTitle") as Label;
    txtTitle.Text = lblTitle.Text;
}
protected void grbBooks_onRowUpdating(object sender, GridViewUpdateEventArgs e) 
{
    TextBox txtTitle = grdBooks.Rows[e.RowIndex].FindControl("txtgrdTitle") as TextBox;
    ....
}

问题是:

  • rowEdit工作正常,在可编辑的文本框中更改网格的所有行。问题是我在文本框中写了一些东西,当我按下“更新”并进入“onRowUpdate”方法时,我没有新文本(我已插入)在我初始化的文本框对象中。我得到了旧的。

(正如你现在看到我在editTemplate中使用了一个带有原始Title值的不可见标签。在我对文本框文本有Eval(“title”)之前我认为这是问题所以我试试另一种方式)

1 个答案:

答案 0 :(得分:0)

由于您的数据源是book。获取数据表的当前数据并更新该行中的值。然后再次绑定网格。

 GridViewRow gridEditRow = this.grdBooks.Rows[e.RowIndex];
 DataRow CurentRow = book.Rows[gridEditRow.DataItemIndex];

CurentRow["Title"] = (gridEditRow.FindControl("txtgrdTitle") as TextBox).Text;