2010-07-29 28 views
0

这里是我到目前为止,代码明智:如何动态地向表中添加多行是ASP.NET?

Protected Sub btnAddRow7_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddRow7.Click 

    Dim tableRow As New System.Web.UI.WebControls.TableRow 
    Dim tableCell As New System.Web.UI.WebControls.TableCell 
    Dim textBox As New System.Web.UI.WebControls.TextBox 

    tableCell.Controls.Add(textBox) 

    tableRow.Cells.Add(tableCell) 

    tbl7.Rows.Add(tableRow) 

End Sub 

...但它只能动态地添加一行。第一次添加之后,点击更多按钮将不会添加更多行。任何想法为什么?更好的方式来做到这一点?

+0

什么是tbl7,它是否启用了ViewState? – 2010-07-29 15:54:32

+0

对不起 - tbl7是在ASP代码中声明的表 - 这是背后的VB代码。是的,ViewState已启用。 – rybosome 2010-07-29 15:57:25

+0

你的Page_Load事件中有什么? – 2010-07-29 15:59:40

回答

0

您可以在Page.Load中重建您的表格。例如:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    rebuildMyTable() 
End Sub 

Private Sub rebuildMyTable() 
    If Me.ViewState("TableRowCount") Is Nothing Then Me.ViewState("TableRowCount") = 0 
    For i As Int32 = 0 To CInt(Me.ViewState("TableRowCount")) - 1 
     AddTableRow() 
    Next 
End Sub 

Private Sub AddTableRow() 
    Dim tableRow As New System.Web.UI.WebControls.TableRow 
    Dim tableCell As New System.Web.UI.WebControls.TableCell 
    Dim textBox As New System.Web.UI.WebControls.TextBox 

    tableCell.Controls.Add(textBox) 

    tableRow.Cells.Add(tableCell) 

    Me.MyTable.Rows.Add(tableRow) 
End Sub 

Protected Sub BtnAddRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddRow.Click 
    AddTableRow() 

    If Me.ViewState("TableRowCount") Is Nothing Then 
     Me.ViewState("TableRowCount") = 1 
    Else 
     Me.ViewState("TableRowCount") = CInt(Me.ViewState("TableRowCount")) + 1 
    End If 
End Sub 

这是因为按钮事件在Viewstate注册后出现。 http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

我认为这可能是最好的解决方案......虽然这将会变得非常复杂。这一页将有14个左右的表格。无论如何,感谢您的帮助 - 这是我需要开始的! – rybosome 2010-07-29 17:21:27

0

HtmlTable似乎没有任何种类的ViewState感知,因此无论是在每次回发中构建所有行,还是使用asp:Table或者asp:Repeater代替。