2013-02-07 1 views
2

안녕하세요 저는 단 하나의 행과 5 개의 열이있는 테이블부터 시작합니다. 추가 행을 추가하기 위해 버튼과 백 코드를 추가했습니다. 첫 번째 행은 잘 보이지만 그 후 2 행에 머물러 있습니다. 페이지 디버깅이 시작됩니다. 나는 viewstate에서 읽었을 뿐이다. 나는 그것을 정확히 이해하지 못한다.테이블에 행을 추가하면 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" /> 

당신은 ViewState에있는 테이블 개체를 저장할 수 없습니다

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 
+0

당신이 시도 것을 우리에게 보여주십시오. 말로만 이해하기는 어렵습니다. –

+0

정확히 내 viewstate 추가하는 시도하지 않았다 더 내 질문. 이것이 실제로 어떻게 이루어 졌는지 모르겠지만 현재 갖고있는 것에 대한 코드를 추가했습니다. 업데이트 패널의 표와 버튼을 클릭하면 다른 행이 추가됩니다. 페이지가 다시 게시되면 이전 행이 삭제되어 2 행 이상을 차지하지 않습니다. 그래서 내가 그것을 viewstate에 추가해야 할 것이라고 생각? – joetinger

+0

GridView와 같은 웹 데이터 바인딩 된 컨트롤을 사용하면 훨씬 쉽게 할 수 있습니다. 그런 다음 ViewState를 조작하거나 컨트롤을 다시 만들 필요가 없습니다. 이러한 컨트롤은 모든 ASP.NET 웹 개발자가 먼저 배워야하는 컨트롤이어야합니다. 귀하의 질문에 대답 : 동적 컨트롤 및 ViewState 여기에 전체 샘플을 추가했습니다 : http://stackoverflow.com/questions/5266482/load-dynamic-control-from-a-dropdownlist-event-handler-howtoto -preserve-the-cont/5266670 # 5266670 –

답변

1

비주얼 베이직, 그것은 직렬화 아니다. DataTable을 사용하도록 코드를 변경하십시오. 그렇지 않으면 수동으로 테이블을 DataTable로 변환하는 코드를 직접 작성해야하며 너무 많은 불필요한 서버 처리가 필요합니다.

당신이 DataTable을로 변경하면 바로 검색 - "ViewState에 VB.NET에 저장 DataTable을"충분히 예보다 더 많은 거기 밖으로