ASP.NET 动态生成的 TableRows 在回发之间不会保留

2024-01-07

在 ASPX 中

<asp:Table ID="superTable" runat="server" Width="100%">
    <%--populate me on the fly!--%>
</asp:Table>

<asp:Button ID="btnAddRow" runat="server" CausesValidation="false" Text="Add Row" onclick="btnAddRow_Click" Width="90%"/>

<asp:Button ID="btnRemoveRow" runat="server" CausesValidation="false" Text="Remove Last Row" onclick="btnRemoveRow_Click" Width="90%"/> 

<asp:Button ID="btnSubmit" runat="server" Text="1" onclick="btnSubmit_Click"  Width="90%"/>

CodeBehind 的相关位

protected void Page_Load(object sender, EventArgs e)
    {if (!IsPostBack){ writeHeader(); makeMeARow(); }}

protected void btnAddRow_Click(object sender, EventArgs e)
{   
    if (int.Parse(btnSubmit.Text) <= 20)
    {   int b = superTable.Rows.Count+1;

        writeHeader();
        btnSubmit.Text = (int.Parse(btnSubmit.Text) + 1).ToString();

        for (int a = 1; a <= int.Parse(btnSubmit.Text); a++)
            { makeMeARow(); }
    }
    else{/*tell user they can't do that! Max of 20 rows as noted by form requirements */}
}

private void writeHeader()
{
    //= == create row == =//
    TableHeaderRow tempHeaderRow = new TableHeaderRow();//make row

    //= == create cells == =//
    TableHeaderCell tempHeaderCell01 = new TableHeaderCell();
    TableHeaderCell tempHeaderCell02 = new TableHeaderCell();
    TableHeaderCell tempHeaderCell03 = new TableHeaderCell();

    tempHeaderCell01.Text = "Call Number";  tempHeaderCell01.Width = Unit.Percentage(33);
    tempHeaderCell02.Text = "Author";       tempHeaderCell02.Width = Unit.Percentage(33);
    tempHeaderCell03.Text = "Title";        tempHeaderCell03.Width = Unit.Percentage(33);

    //= == add TableCells to TableRow == =//
    tempHeaderRow.Cells.Add(tempHeaderCell01);
    tempHeaderRow.Cells.Add(tempHeaderCell02);
    tempHeaderRow.Cells.Add(tempHeaderCell03);

    //superTable.Rows.AddAt(superTable.Rows.Count, tempRow);
    superTable.Rows.Add(tempHeaderRow);
}

protected void btnRemoveRow_Click(object sender, EventArgs e)
{   int b = superTable.Rows.Count - 1;

    writeHeader();
    btnSubmit.Text = (int.Parse(btnSubmit.Text) - 1).ToString();
    for (int a = 1; a <= int.Parse(btnSubmit.Text); a++)
    {makeMeARow();}   
}
private void makeMeARow()
{
    //= == maybe off by one? == =//
    string rowCount = superTable.Rows.Count.ToString("00");

    //= == create row == =//
    TableRow tempRow = new TableRow();//make row

    //= == create cells == =//
    TableCell tempCell01 = new TableCell();
    TableCell tempCell02 = new TableCell();
    TableCell tempCell03 = new TableCell();

    //= == create TextBoxes == =//
    TextBox tempTextBox01 = new TextBox();
    TextBox tempTextBox02 = new TextBox();
    TextBox tempTextBox03 = new TextBox();

    //= == change the ID of TableRow == =//
    tempRow.ID = "tableRow_" + rowCount;

    //= == change the IDs of TableCells == =//
    tempCell01.ID = "tableCell_" + rowCount + "_01";
    tempCell02.ID = "tableCell_" + rowCount + "_02";
    tempCell03.ID = "tableCell_" + rowCount + "_03";

    //= == change the IDs of TextBoxes == =//
    tempTextBox01.ID = "txtCallNumber_" + rowCount;
    tempTextBox02.ID = "txtAuthor_" + rowCount;
    tempTextBox03.ID = "txtTitle_" + rowCount;

    //= == change TextBox widths to 90%;
    tempTextBox01.Width = Unit.Percentage(90);
    tempTextBox02.Width = Unit.Percentage(90);
    tempTextBox03.Width = Unit.Percentage(90);

    //= == add TextBoxes to TableCells == =//
    tempCell01.Controls.Add(tempTextBox01);
    tempCell02.Controls.Add(tempTextBox02);
    tempCell03.Controls.Add(tempTextBox03);

    //= == add TableCells to TableRow == =//
    tempRow.Cells.Add(tempCell01);
    tempRow.Cells.Add(tempCell02);
    tempRow.Cells.Add(tempCell03);

    //add TableRow to superTable
    //superTable.Rows.AddAt(superTable.Rows.Count, tempRow);
    superTable.Rows.Add(tempRow);
}

好吧,那么,我的问题; -当我点击“添加行”或“删除行”按钮时,单元格中的数据在回发之间不会保留。相关行和单元格拥有相同的 ID,但不保留数据。为什么不?


每次回发时必须将动态控件重新添加到表单中。通常这是在Init页面生命周期的阶段。您动态添加的控件实际上具有 ViewState。当使用与之前完全相同的 ID 将适当的控件重新添加到控件树时,它应该重新出现并具有 ViewState 中保留的值。

查看本文 http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx有关使用动态控件的简单提示,或者您可以查看本教程4 罗拉人 https://web.archive.org/web/20211020131055/https://www.4guysfromrolla.com/articles/081402-1.aspx以便更深入地了解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 动态生成的 TableRows 在回发之间不会保留 的相关文章

随机推荐