2013-02-14 85 views
0

我有一些代码,我在网上找到动态地添加一个新行到表http://geekswithblogs.net/dotNETvinz/archive/2009/06/29/faq-dynamically-adding-rows-in-asp-table-on-button-click.aspx。行被添加并且所有先前的数据都消失了。从评论中看来,很多人都有这个问题。表格文本框在回发中丢失的价值

ASPX

<asp:UpdatePanel ID="upMaterial" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="Button1" EventName ="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:Table ID="tbMaterials" runat="server" GridLines="Both" Visible="false"> 
      <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:Table> 
     <asp:Button ID="Button1" runat="server" Text="Button" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

VB

Public Class _Default 
Inherits System.Web.UI.Page 
Private numOfRows As Integer = 1 

Protected Sub Page_Load(sender As Object, e As EventArgs) 
    If Not Page.IsPostBack Then 
     ViewState("RowsCount") = 1 
    End If 
End Sub 

Protected Sub addRow(sender As Object, e As EventArgs) Handles Button1.Click 
    'adds the column row once we know the header row is there 
    If ViewState("RowsCount") IsNot Nothing Then 
     tbMaterials.Visible = True 
     numOfRows = Convert.ToInt32(ViewState("RowsCount").ToString) 
     GenerateTable(numOfRows) 
    End If 
End Sub 

Private Sub GenerateTable(rowsCount As Integer) 
    'Creat the Table and Add it to the Page 

    Dim table As Table = tbMaterials 

    'The number of Columns to be generated 
    Const colsCount As Integer = 5 
    'You can changed the value of 3 based on you requirements 

    ' Now iterate through the table and add your controls 
    For i As Integer = 0 To rowsCount - 1 
     Dim row As New TableRow() 

     For j As Integer = 0 To colsCount - 1 
      Dim cell As New TableCell() 
      Dim tb As New TextBox() 

      ' Set a unique ID for each TextBox added 
      tb.ID = "TextBoxRow_" + i.ToString + "Col_" + j.ToString 
      ' Add the control to the TableCell 
      cell.Controls.Add(tb) 
      ' Add the TableCell to the TableRow 
      row.Cells.Add(cell) 
     Next 

     ' And finally, add the TableRow to the Table 
     table.Rows.Add(row) 
    Next 
    'Set Previous Data on PostBacks 
    SetPreviousData(rowsCount, colsCount) 
    'Sore the current Rows Count in ViewState 
    rowsCount += 1 
    ViewState("RowsCount") = rowsCount 
End Sub 
Private Sub SetPreviousData(rowsCount As Integer, colsCount As Integer) 
    Dim table As Table = tbMaterials 
    If table IsNot Nothing Then 
     For i As Integer = 0 To rowsCount - 1 
      For j As Integer = 0 To colsCount - 1 
       'Extracting the Dynamic Controls from the Table 
       Dim tb As TextBox = DirectCast(table.Rows(i).Cells(j).FindControl("TextBoxRow_" + i.ToString + "Col_" + j.ToString), TextBox) 
       'Use Request objects for getting the previous data of the dynamic textbox 
       tb.Text = Request.Form("TextBoxRow_" + i.ToString + "Col_" + j.ToString) 
      Next 
     Next 
    End If 
End Sub 

回答

0

您可以检查使用从浏览器中查看源代码,如果ID使用的是获得表单变量是相同的变量名的名字,你正在使用tb.Text = Request.Form(“TextBoxRow_”+ i.ToString +“Col_”+ j.ToString)。因为我们不能使用id来请求变量。

+0

非常感谢您现在正常工作 – joetinger 2013-02-15 14:08:52

相关问题