GridView行未更新,GridView编辑模板中文本框中的文本未出现

本文关键字:文本 GridView 更新 编辑 中文 | 更新日期: 2023-09-27 18:07:59

我有网格视图,我想更新行,但它没有发生。数据源是一个DataTable。请帮助。


下面是标记

<asp:GridView ID="GrdV" runat="server" AutoGenerateColumns="false"   
   OnRowEditing="GrdV_RowEditing"  OnRowUpdating="GrdV_RowUpdating">
 <Columns>
   <asp:TemplateField HeaderText="Clip Description">
        <ItemTemplate>
            <asp:Label ID="lblDescrptn" runat="server" Text='<%# Bind("Description") %>'>
            </asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="descTbx" runat="server" Text='<%# Bind("Description") %>'>
            </asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
   <asp:CommandField ShowEditButton="True" />
 </Columns>

这是

后面的代码
    protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        // Retrieve the row being edited.
      int index = GrdV.EditIndex;
        GridViewRow row = GrdV.Rows[index];           
        TextBox t1 = row.FindControl("descTbx") as TextBox;
        DataTable dt = (DataTable)Session["tmdataTable"];
        dt.Rows[index]["Description"] = t1.Text; //Description is a column of my DataTable
        dt.AcceptChanges();
        GrdV.EditIndex = -1;
        GrdV.DataSource = dt;
        GrdV.DataBind();
    }

在调试中,我发现文本框正在传递空字符串t1.Text ="",即使我已经用新值填充了文本框。我认为错误在

TextBox t1 = row.FindControl("descTbx") as TextBox;
新代码


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GrdV.DataSource = Session["tmdataTable"];
            GrdV.DataBind();
        }

        DataTable Finaldt = getTable();
        GrdV.DataSource = Finaldt;
        GrdV.DataBind();
        Session["tmdataTable"] = Finaldt;
    }

GridView行未更新,GridView编辑模板中文本框中的文本未出现

EditIndex不可用,您需要GridViewUpdateEventArgs的e.RowIndex

// Retrieve the row being edited.
DataTable dt = (DataTable)Session["tmdataTable"];
GridViewRow row = GrdV.Rows[e.RowIndex];
TextBox t1 = row.FindControl("descTbx") as TextBox;
dt.Rows[row.DataItemIndex]["Description"] = t1.Text; //Description is a column of my DataTable
dt.AcceptChanges();
GrdV.EditIndex = -1;
GrdV.DataSource = dt;
GrdV.DataBind();

稍微修改一下代码并检查一下。将EditIndex更改为e.RowIndex

protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = GrdV.Rows[e.RowIndex]; // this line is changed      
    TextBox t1 = row.FindControl("descTbx") as TextBox;
    DataTable dt = (DataTable)Session["tmdataTable"];
    dt.Rows[row.DataItemIndex]["Description"] = t1.Text; //Description is a column of my DataTable
    dt.AcceptChanges();
    GrdV.EditIndex = -1;
    GrdV.DataSource = dt;
    GrdV.DataBind();
}

你这样做了吗?

protected void Page_Load(object sender, EventArgs e)
{     
    if(!IsPostBack)
    {
        GrdV.DataSource = Session["tmdataTable"];
        GrdV.DataBind();
    }
}
 protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
         if (e.Item is GridDataItem)
        {
        // Retrieve the row being edited.
      int index = GrdV.EditIndex;
        GridViewRow row = GrdV.Rows[index];           
        TextBox t1 = row.FindControl("descTbx") as TextBox;
        DataTable dt = (DataTable)Session["tmdataTable"];
        dt.Rows[index]["Description"] = t1.Text; //Description is a column of my DataTable
        dt.AcceptChanges();
        GrdV.EditIndex = -1;
        GrdV.DataSource = dt;
        GrdV.DataBind();
        }
    }