ASP C#将行添加到表中并在回发后继续

ASP C#将行添加到表中并在回发后继续,c#,asp.net,C#,Asp.net,我正在寻找一种简单的方法来创建用户在提交表单中输入的数据的运行表。该表实际上只需要添加一行,其中包含刚刚输入的数据,但更重要的是,还需要回发 表格应该有一个标题,然后是上次提交时输入的每个“集合”数据的一行 例如: <asp:Table ID="lastRecordTable" runat="server" ViewStateMode="Enabled" AutoPostBack="true"> <asp:TableHeaderRow> &

我正在寻找一种简单的方法来创建用户在提交表单中输入的数据的运行表。该表实际上只需要添加一行,其中包含刚刚输入的数据,但更重要的是,还需要回发

表格应该有一个标题,然后是上次提交时输入的每个“集合”数据的一行

例如:

<asp:Table ID="lastRecordTable" runat="server" ViewStateMode="Enabled"
    AutoPostBack="true">
    <asp:TableHeaderRow>
        <asp:TableCell>A</asp:TableCell>
        <asp:TableCell>B</asp:TableCell>
        <asp:TableCell>C</asp:TableCell>
        <asp:TableCell>D</asp:TableCell>
    </asp:TableHeaderRow>
    <asp:TableRow>
        <asp:TableCell>1</asp:TableCell>
        <asp:TableCell>2</asp:TableCell>
        <asp:TableCell>3</asp:TableCell>
        <asp:TableCell>4</asp:TableCell>
    </asp:TableRow>
</asp:Table>

非常感谢您的建议。

因为您是动态添加行的,所以每次加载页面时都需要(重新)创建行,这包括回发。因此,将行的添加移到
IsPostBack
检查之外

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //not here
    }

    //but here
    TableRow row = new TableRow();
    TableCell cell1 = new TableCell();
    TableCell cell2 = new TableCell();
    TableCell cell3 = new TableCell();
    TableCell cell4 = new TableCell();
    cell1.Text = 1.ToString();
    cell1.Text = 2.ToString();
    cell1.Text = 3.ToString();
    cell1.Text = 4.ToString();
    row.Cells.Add(cell1);
    row.Cells.Add(cell2);
    row.Cells.Add(cell3);
    row.Cells.Add(cell4);
    lastRecordTable.Rows.Add(row);
}

您不需要
ViewStateMode=“Enabled”
AutoPostBack=“true”
,这就是我要做的:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {                

        }    

        lastRecordTable();

    }
表格方法:

    public void lastRecordTable()
    {
        if (Session["lastRecord"] == null)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("1");
            dt.Columns.Add("2");
            dt.Columns.Add("3");
            dt.Columns.Add("4");

            Session["lastRecord"] = dt;

            GridView1.DataSource = dt;
            GridView1.DataBind();           
        }
        else
        {
            DataTable dt = (DataTable)Session["lastRecord"];
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }  
修改表:

    protected void buttonSubmit_Click(object sender, EventArgs e)
    {
            //do stuff here
            DataTable dt = Session["lastRecord"] as DataTable;
            DataRow row = dt.NewRow();
            row["1"] = "A";
            row["2"] = "B";
            row["3"] = "C";
            row["4"] = "D";
            dt.Rows.Add(row);
            Session["lastRecord"] = dt;
            lastRecordTable();
    }
ASP:



我对asp c#非常陌生,所以不能100%确定这是“正确的”,但它可以工作

您需要将新行添加到数据源中,以便在回发后表收到数据时刷新。如果您没有数据源,则必须将其放入会话变量中。除了将运行记录写入网页上的表外,没有其他数据源。我想这可以这样做。我将看一看会话变量,看看是否可以合并/使用它。对于上面的示例,代码是这样的?会话[“1”]=1.文本;在加载页面上有回调吗?表是否会以这种方式填充多行?您需要存储一个与表中的整个行列表相等的行数组。基本HTML和WebForms等网站在回发之间“忘记”任何内容,除非专门存储在会话变量或数据源中。他们无法自行存储数据。我无法使其正常工作。该表被写入,更新为1行数据不正确,但通过重复“提交”只添加了1行。我可以尝试另一种方法。因为要动态添加行,所以需要重新创建它们。如果大于1,则需要将该行数存储在会话或ViewState中。是否可以在提交时在代码中添加行,然后将整个表存储在ViewState中,然后在回发中通过ViewState检索表?据我所知,表不能存储在ViewState中,但DataTable可以。是的,将datatable存储在viewstate中,添加您可以保留的行。
    protected void buttonSubmit_Click(object sender, EventArgs e)
    {
            //do stuff here
            DataTable dt = Session["lastRecord"] as DataTable;
            DataRow row = dt.NewRow();
            row["1"] = "A";
            row["2"] = "B";
            row["3"] = "C";
            row["4"] = "D";
            dt.Rows.Add(row);
            Session["lastRecord"] = dt;
            lastRecordTable();
    }
    <asp:GridView ID="GridView1" runat="server" ViewStateMode="Enabled" 
         AutoPostBack="true"></asp:GridView>