如何在VB.NET中复制对象类型?

时间:2010-07-29 18:22:21

标签: asp.net vb.net

我正在构建一个需要动态表的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

单步调试,我看到这个策略正在运行 - 但是附加的表行仍然没有出现......而且当我静态执行此操作时仍然会这样做。

1 个答案:

答案 0 :(得分:1)

我认为你的罪魁祸首可能就是这句话:

Dim insertingCells(originalRow.Cells.Count) As TableCell

令人困惑的是,您在VB.NET中的数组声明中指定的数字是上限,而不是元素的数量。因此Dim ints(10) As Integer将创建一个{strong 1>}数组,其中包含 11个元素,而不是10个(10个将是数组的最高索引)。

请改为尝试:

Integer()