我正在构建一个需要动态表的ASP.NET应用程序。这是我已经发布的另一个问题(并得到了很好的回应!)。现在,我遇到了另一个问题 - 我想在我的表中添加新行,但考虑到我将在一个页面上有10-12个表,每个表在其行中包含不同的对象(文本框,复选框等)。我需要一种简单地添加一个新行的方法,该行与表中的第一行具有相同的对象。这是我的代码:
Private Sub AddTableRow(ByRef originalTable As System.Web.UI.WebControls.Table)
Dim originalRow As System.Web.UI.WebControls.TableRow = originalTable.Rows(1)
Dim insertingRow As New System.Web.UI.WebControls.TableRow
Dim insertingCells(originalRow.Cells.Count) As System.Web.UI.WebControls.TableCell
Dim index As Integer = 0
For Each cell As System.Web.UI.WebControls.TableCell In originalRow.Cells
insertingCells(index) = New System.Web.UI.WebControls.TableCell
insertingCells(index).Controls.Add(cell.Controls.Item(0))
index += 1
Next
insertingRow.Cells.AddRange(insertingCells)
originalTable.Rows.Add(insertingRow)
End Sub
但是我在倒数第二行得到一个空引用异常,
insertingRow.Cells.AddRange(insertingCells)
......我无法弄清楚原因。是因为每个单元格的内容没有用新对象初始化吗?如果是这样,我将如何解决这个问题?
谢谢!
编辑:
我的for循环内部现在看起来像这样 -
For Each cell As System.Web.UI.WebControls.TableCell In originalRow.Cells
Dim addedContent As New Object
Dim underlyingType As Type = cell.Controls.Item(0).GetType
addedContent = Convert.ChangeType(cell.Controls.Item(0), underlyingType)
insertingCells(index) = New System.Web.UI.WebControls.TableCell
insertingCells(index).Controls.Add(addedContent)
index += 1
Next
单步调试,我看到这个策略正在运行 - 但是附加的表行仍然没有出现......而且当我静态执行此操作时仍然会这样做。
答案 0 :(得分:1)
我认为你的罪魁祸首可能就是这句话:
Dim insertingCells(originalRow.Cells.Count) As TableCell
令人困惑的是,您在VB.NET中的数组声明中指定的数字是上限,而不是元素的数量。因此Dim ints(10) As Integer
将创建一个{strong 1>}数组,其中包含 11个元素,而不是10个(10个将是数组的最高索引)。
请改为尝试:
Integer()