2010-07-29 2 views
0

Я создаю приложение ASP.NET, которому нужны динамические таблицы. Это еще одна проблема, о которой я уже писал (и получил довольно хороший ответ!). Теперь у меня возникает другая проблема - я хочу добавить новые строки в свою таблицу, но при условии, что у меня будет 10-12 таблиц на одной странице, каждая из которых содержит разные объекты в своих строках (текстовые поля, флажки и т. Д.).) Мне нужно просто просто добавить новую строку с теми же объектами, что и первая строка в таблице. Вот мой код:Как копировать типы объектов в VB.NET?

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)

... и я могу» t выяснить почему. Это потому, что содержимое каждой ячейки не инициализируется новым объектом? Если да, то как мне обойти это?

Спасибо!

EDIT:

внутри моего цикл теперь выглядит следующим образом -

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 

Пошаговый с помощью отладчика, я вижу, что эта стратегия работает - но дополнительная строка таблицы еще Безразлично» t появляется ... и все еще делает, когда я делаю это статически.

ответ

1

Я думаю, что ваш виновник может быть эта линия:

Dim insertingCells(originalRow.Cells.Count) As TableCell 

Смутно, число указывается в объявлении массива в VB.NET верхняя граница, а не количество элементов. Таким образом, Dim ints(10) As Integer создаст массив Integer() с одиннадцать элементов, а не десять (10 будет самым высоким индексом массива).

Попробуйте вместо этого:

Dim insertingCells(originalRow.Cells.Count - 1) As TableCell 
+0

Это решило проблему ошибки во время выполнения, но, видимо, объекты все еще не копируются - не новая строка не добавляется к моему столу. Я прокомментировал этот код и включил статическое добавление строки таблицы, а затем добавила новую строку в мою таблицу. Здесь что-то еще не так. Спасибо за вашу помощь! знак равно – rybosome

Смежные вопросы