2

ASP.NET の System.Web.UI.WebControls.Table コントロールに行を動的に追加しようとしています。探していることを実行するサンプル コードを見つけましたが、1 行しか追加されません。

テーブルの行数は、あるページの読み込みから次のページに引き継がれないようです。ユーザーは必要な数の行を追加できる必要があり、各行からデータを取得する必要があります。

私は何が欠けていますか?以下のコード。

<%@ 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>
4

1 に答える 1

4

ASP.NETはステートレスです。ページの読み込み間で必要なデータをSession変数に永続化する必要があります。

DataTable / DataSetをセッション変数に格納し、「PageLoad」イベントでTable1のDatasourceプロパティをそのDataSetに割り当てる必要があります。次に、「クリック」イベントで、Session変数のDataSetに行を追加します。

アップデート

ViewState="true"ポストバックを介してデータを永続化するコントロールを設定できる場合があります。

于 2009-12-23T18:43:50.510 に答える