在ASP.NET中动态地向行添加行?

时间:2009-12-23 18:40:36

标签: asp.net vb.net system.web.ui.webcontrols

我正在尝试动态地向ASP.NET中的System.Web.UI.WebControls.Table控件添加行。我找到了一些我正在寻找的sample code,但它只增加了一行。

似乎表行计数不会从一个页面加载到下一个页面加载。用户应该能够根据需要添加任意数量的行,并且我需要从每一行捕获数据。

我错过了什么?代码如下。

<%@ Page Language="VB" %>
<script runat="server">

    Sub btnAddEmail_Click(ByVal Sender As Object, ByVal e As EventArgs)

        Dim tr As New TableRow
        Dim tcLabel As New TableCell
        Dim tcTextBox As New TableCell
        Dim newLabel As New Label
        Dim newTextBox As New TextBox

        Dim i As Integer = Table1.Rows.Count + 1

        newLabel.ID = "Email" + Convert.ToString(i)
        newLabel.Text = "Email" + Convert.ToString(i)

        newTextBox.ID = "txtEmail" + Convert.ToString(i)

        tcLabel.Controls.Add(newLabel)
        tcTextBox.Controls.Add(newTextBox)

        tr.Cells.Add(tcLabel)
        tr.Cells.Add(tcTextBox)

        Table1.Rows.Add(tr)

    End Sub

</script>

<form id="form1" runat="server">
<div>
    <asp:Button runat="server" Text="Add Email" ID="btnAddEmail"
        onclick="btnAddEmail_Click" />
    <asp:Table ID="Table1" runat="server">
        <asp:TableRow>
            <asp:TableCell>
                <asp:Label ID="Email1" runat="server" Text="Email1"></asp:Label></asp:TableCell>
            <asp:TableCell>
                <asp:TextBox ID="txtEmail1" runat="server"></asp:TextBox></asp:TableCell>
        </asp:TableRow>
    </asp:Table>
</div>
</form>

1 个答案:

答案 0 :(得分:4)

ASP.NET是无状态的 - 您需要将页面之间所需的任何数据加载到Session变量中。

您需要将DataTable / DataSet存储在会话变量中,并将Table1的Datasource属性分配给“PageLoad”事件中的DataSet。然后,在“Click”事件中,将行添加到Session变量中的DataSet中。

<强>更新

您可以在控件上设置ViewState="true",希望通过回发保留数据。