C# 数据表->;添加行时通过回发保持Gridview

C# 数据表->;添加行时通过回发保持Gridview,c#,asp.net,gridview,viewstate,C#,Asp.net,Gridview,Viewstate,我目前正在手动向datatable添加数据,然后将datatable绑定到gridview,一次绑定一行。但是,在尝试添加新行时,每次回发都会覆盖原始行,因为每次都会创建并绑定一个新的数据表 如何在视图状态下保留datatable,并将其添加、绑定,然后再次保留,以便继续向gridview添加行?我对视图状态一点也不熟悉;我只知道这是我在谷歌上搜索的结果 <asp:DropDownList ID="DDLFirstColumn" runat="server" Style="z-in

我目前正在手动向datatable添加数据,然后将datatable绑定到gridview,一次绑定一行。但是,在尝试添加新行时,每次回发都会覆盖原始行,因为每次都会创建并绑定一个新的数据表

如何在视图状态下保留datatable,并将其添加、绑定,然后再次保留,以便继续向gridview添加行?我对视图状态一点也不熟悉;我只知道这是我在谷歌上搜索的结果

    <asp:DropDownList ID="DDLFirstColumn" runat="server" Style="z-index: 1; left: 11px;
    top: 171px; position: absolute; height: 16px; width: 104px">
    <asp:ListItem>Selection 1</asp:ListItem>
    <asp:ListItem>Selection 2</asp:ListItem>
    <asp:ListItem>Selection 3</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtSecondColumn" runat="server" style="z-index: 1; left: 127px; top: 169px; position: absolute; height: 22px; width: 56px"></asp:TextBox>
<asp:DropDownList ID="DDLThirdColumn" runat="server" Style="z-index: 1; left: 200px; top: 171px;
    position: absolute">
    <asp:ListItem>Selection 1</asp:ListItem>
    <asp:ListItem>Selection 2</asp:ListItem>
    <asp:ListItem>Selection 3</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btn_Add" runat="server" Style="z-index: 1; left: 345px; top: 167px;
    position: absolute" Text="Add" OnClick="btn_Add_Click" />
<asp:GridView ID="GridView1" runat="server" Style="z-index: 1; left: 14px; top: 219px;
    position: absolute; width: 400px">
</asp:GridView>

using System;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btn_Add_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Column 1", Type.GetType("System.String"));
        dt.Columns.Add("Column 2", Type.GetType("System.String"));
        dt.Columns.Add("Column 3", Type.GetType("System.String"));

        dt.Columns[0].DefaultValue = DDLFirstColumn.SelectedValue;
        dt.Columns[1].DefaultValue = txtSecondColumn.Text;
        dt.Columns[2].DefaultValue = DDLThirdColumn.SelectedValue;

        dt.Rows.Add();

        GridView1.DataSource = dt;

        GridView1.DataBind();

    }
}

选择1
选择2
选择3
选择1
选择2
选择3
使用制度;
使用系统数据;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的无效btn\u添加\u单击(对象发送者,事件参数e)
{
DataTable dt=新的DataTable();
Add(“第1列”,Type.GetType(“System.String”);
Add(“Column 2”,Type.GetType(“System.String”);
Add(“第3列”,Type.GetType(“System.String”);
dt.Columns[0].DefaultValue=DDLFirstColumn.SelectedValue;
dt.Columns[1].DefaultValue=txtSecondColumn.Text;
dt.Columns[2].DefaultValue=ddldColumn.SelectedValue;
dt.Rows.Add();
GridView1.DataSource=dt;
GridView1.DataBind();
}
}

您可以在ViewState中存储数据表,如:

 ViewState["dt"] = dt; // Store it in viewstate
然后,您可以从视图状态访问它,如下所示:

DataTable dt = (DataTable)ViewState["dt"]; // Retrieving from ViewState 

protected void btn_Add_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
..............

dt.Rows.Add();

ViewState["dt"] = dt; // storing datatable in ViewState

GridView1.DataSource = dt;
GridView1.DataBind();
}
}

我试过你举的例子,但没能成功。我可能错过了一些简单的东西,但我尝试了多种安排,但仍然一无所获。不过,我还是找到了一个可行的解决方案,谢谢你的帮助。你问的问题是,如何从ViewState存储和检索。您错过的是,当您第二次尝试添加值时,您必须从ViewState而不是从新的datatable获取值。