向表添加行需要添加到viewstate?

时间:2013-02-07 21:41:33

标签: asp.net vb.net viewstate

您好我从一个包含单行和5列的表开始。我添加了一个按钮和后退代码来添加其他行。第一行显示正常,但在此之后保持2行。正在调试页面。我已经阅读了viewstate我只是不完全理解如何添加它,如果这是有道理的。

修改

     <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

1 个答案:

答案 0 :(得分:1)

您无法在ViewState中存储Table对象,它不可序列化。考虑更改代码以使用DataTable,否则您将需要手动编写代码以将表转换为DataTable,这将是太多不必要的服务器处理。

一旦你将它改为DataTable,只需搜索 - “在ViewState VB.NET中存储DataTable ”,那里有足够多的例子