在Grid中添加新行后,值将被清除

时间:2012-12-03 12:30:21

标签: c# asp.net .net gridview

当我尝试向现有网格添加新行时,我的值将被清除。使用Viewstate我将数据表维护在页面上并将其绑定到网格。认为在回发期间值已被清除。

// AddNewRow

int rowIndex = 0;

        if (ViewState["CurrentTable"] != null)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
            DataRow drCurrentRow = null;
            int i;

            if (dtCurrentTable.Rows.Count > 0)
            {
                for (i = 1; i <= dtCurrentTable.Rows.Count; i++)
                {
                    TextBox txtguide = (TextBox)grdreports.Rows[rowIndex].FindControl("txtAccNo");
  drCurrentRow = dtCurrentTable.NewRow();

                    dtCurrentTable.Rows[i - 1]["txtAccNo"] = txtguide.Text;
 rowIndex += 1;

                }
                drCurrentRow = dtCurrentTable.NewRow();
                dtCurrentTable.Rows.Add(drCurrentRow);
                ViewState["CurrentTable"] = dtCurrentTable;
                ViewState["rowcount"] = dtCurrentTable.Rows.Count;
                grdreports.DataSource = dtCurrentTable;
                grdreports.DataBind();

            }
}

// aspx页面:

<asp:GridView ID="grdreports" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField>
                <HeaderTemplate>
                    S.No</HeaderTemplate>
                <ItemTemplate>
                    <%#Container.DataItemIndex+1 %>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Acc.No/Tel.No">
                <ItemTemplate>
                    <asp:TextBox ID="txtAccNo" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "nvrGuide")%>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
 <asp:TemplateField HeaderText="AddNew" ShowHeader="false">
                <ItemTemplate>
                    <asp:LinkButton ID="lbtnAddGuide" runat="server" CommandName="Add" Text="Add New"
                        OnClick="lbtnAddGuide_OnClick"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Delete" ShowHeader="false">
                <ItemTemplate>
                    <asp:LinkButton ID="lbtnDeleteGuide" runat="server" CommandName="Delete" Text="Delete"
                        OnClick="lbtnDeleteGuide_OnClick"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

我哪里错了?

2 个答案:

答案 0 :(得分:1)

我的猜测是,名字不同。

这意味着, 名称

`Text='<%#DataBinder.Eval(Container.DataItem, "nvrGuide")%>'` 
.aspx页面中指定的

“nvrguide”,但.cs页面中的名称

TextBox txtguide = (TextBox)grdreports.Rows[rowIndex].FindControl("txtAccNo");

“txtAccNo”。所以我认为你在.cs页面中作为空网格绑定的值与.aspx页面不同。

请在两个页面中将其更改为相同。

可能它应该为此抛出错误。由于代码没有完全显示,我不能tel。

答案 1 :(得分:0)

对于页面回发,请在页面加载事件

上使用以下代码
protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {

                 foreach (GridViewRow row in GridView1.Rows)
                    {
                        ((TextBox)row.FindControl("txtAccNo")).Text = Request.Form[((TextBox)row.FindControl("txtAccNo")).UniqueID];
                    }
          }
    }