2

こんにちは私は1行5列のテーブルから始めます。行を追加するためのボタンとバックコードを追加しました。最初の行は正常に表示されますが、その後は2行のままです。ページのデバッグが実行されています。ビューステートについて読んだことがありますが、それが理にかなっている場合は、ビューステートに追加する方法を正確に理解していません。

編集

     <asp:UpdatePanel ID="upTable" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnNewRow" EventName ="click" />
    </Triggers> 
    <ContentTemplate>
            <div>
                <asp:Table ID="tblPrice" runat="server" GridLines="Both">
                    <asp:TableRow>
                        <asp:TableCell>QTY.</asp:TableCell>
                        <asp:TableCell>MATERIAL</asp:TableCell>
                        <asp:TableCell>COST</asp:TableCell>
                        <asp:TableCell>PRICE</asp:TableCell>
                        <asp:TableCell>TOTAL</asp:TableCell>
                    </asp:TableRow>
                    <asp:TableRow>
                        <asp:TableCell>
                            <asp:TextBox ID="tbQty1" runat="server" Width="40" Text="0"></asp:TextBox>
                        </asp:TableCell>
                        <asp:TableCell>
                            <asp:TextBox ID="tbMaterial1" runat="server"></asp:TextBox>
                        </asp:TableCell>
                        <asp:TableCell>
                            <asp:TextBox ID="tbCost1" runat="server" OnTextChanged="PriceChange" AutoPostBack ="true" Text="0"></asp:TextBox>
                            <asp:MaskedEditExtender ID="meeCost1" runat="server" Mask="99,999,999.99" DisplayMoney="Left" TargetControlID="tbCost1" MaskType="Number">
                            </asp:MaskedEditExtender>
                        </asp:TableCell>
                        <asp:TableCell>
                            <asp:TextBox ID="tbPrice1" runat="server" OnTextChanged="PriceChange" AutoPostBack="true"  Text="0"></asp:TextBox>
                            <asp:MaskedEditExtender ID="meePrice1" runat="server" Mask="99,999,999.99" DisplayMoney="Left" TargetControlID="tbPrice1" MaskType="Number">
                            </asp:MaskedEditExtender>
                        </asp:TableCell>
                        <asp:TableCell>
                            <asp:Label ID="lblTotal1" runat="server" Text="$0.00"></asp:Label>
                        </asp:TableCell>
                    </asp:TableRow>
                </asp:Table>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Button ID="btnNewRow" runat="server" Text="Add Row" />

vb

Protected Sub btnNewRow_Click(sender As Object, e As EventArgs) Handles btnNewRow.Click
    Dim TRow As New TableRow()
    Dim qtyCell As New TableCell()
    Dim materialCell As New TableCell()
    Dim costCell As New TableCell()
    Dim priceCell As New TableCell()
    Dim totalCell As New TableCell()

    Dim qtyTB As New TextBox()
    Dim materialTB As New TextBox()
    Dim costTB As New TextBox()
    Dim priceTB As New TextBox()

    Dim costMEE As New AjaxControlToolkit.MaskedEditExtender
    Dim priceMEE As New AjaxControlToolkit.MaskedEditExtender

    Dim rowsCount As Integer = tblPrice.Rows.Count
    Dim rowsString As String = rowsCount.ToString

    qtyTB.Width = 40

    'configure the masked edit extender controls
    With costMEE
        .ID = "meeCost" & rowsString
        .Mask = "99,999,999.99"
        .DisplayMoney = AjaxControlToolkit.MaskedEditShowSymbol.Left
        .TargetControlID = "tbCost" & rowsString
        .MaskType = AjaxControlToolkit.MaskedEditType.Number
    End With
    With priceMEE
        .ID = "meePrice" & rowsString
        .Mask = "99,999,999.99"
        .DisplayMoney = AjaxControlToolkit.MaskedEditShowSymbol.Left
        .TargetControlID = "tbPrice" & rowsString
        .MaskType = AjaxControlToolkit.MaskedEditType.Number
    End With

    'Add masked edit extender to textboxes
    costTB.Controls.Add(costMEE)
    priceTB.Controls.Add(priceMEE)


    'add id names to the textboxes
    qtyTB.ID = "tbQty" & rowsString
    materialTB.ID = "tbMaterial" & rowsString
    costTB.ID = "tbCost" & rowsString
    priceTB.ID = "tbPrice" & rowsString

    'Add textbox to the table cells
    qtyCell.Controls.Add(qtyTB)
    materialCell.Controls.Add(materialTB)
    costCell.Controls.Add(costTB)
    priceCell.Controls.Add(priceTB)

    'Add table cells to the table row
    TRow.Cells.Add(qtyCell)
    TRow.Cells.Add(materialCell)
    TRow.Cells.Add(costCell)
    TRow.Cells.Add(priceCell)
    TRow.Cells.Add(totalCell)

    'Add table row to the table
    tblPrice.Rows.Add(TRow)
End Sub
4

1 に答える 1

1

TableオブジェクトをViewStateに格納することはできません。シリアル化できません。DataTableを使用するようにコードを変更することを検討してください。そうしないと、テーブルをDataTableに変換するコードを手動で作成する必要があり、サーバーでの不要な処理が多すぎます。

DataTableに変更したら、「ViewStateVB.NETにDataTableを保存する」を検索するだけです。十分な数の例があります。

于 2013-02-08T07:15:32.240 に答える