0

行を更新したいグリッドビューがありますが、それは起こっていません。データソースは 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;

PageLoad コード

    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;

    }
4

3 に答える 3

0
 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();
        }
    }
于 2013-04-06T07:17:59.110 に答える