Как консолидировать данные для строки перед ее добавлением с помощью Datagridview.rows.add()?

Я столкнулся с этой проблемой, потому что хотел бы, чтобы мой код работал, даже если я добавил новые столбцы в исходный код. Мой код добавляет строку на основе количества строк источника. В моем коде отсутствует возможность учитывать количество столбцов. Вот мой код:

For Each srow As datagridviewrow In mytempDG.Rows
   dataGridView1.Rows.Add(srow.Cells(0).Value.tostring, srow.Cells(1).Value.tostring, _
   & srow.Cells(2).Value.tostring, srow.Cells(3).Value.tostring,srow.Cells(4).Value.tostring, _
   & srow.Cells(5).Value.tostring, srow.Cells(6).Value.tostring)
Next

Приведенный выше код работает нормально, учитывая, что у меня есть 7 столбцов из tempDG (кстати, это мой источник данных). Но что, если я добавил еще два столбца (что делает их 9). Затем мне пришлось бы отредактировать код из источника (добавить «srow.cells(7).value.tostring, srow.cells(8).value... и т.д.»)

Я знаю, как перебрать столбец, но не знаю, как преобразовать его в данные, которые можно прочитать с помощью функции rows.add. Это то, что я пробовал до сих пор:

Dim finrow As List(Of String)
finrow = New List(Of String)

For Each srow As datagridviewrow In mytempDG.Rows
   finrow.clear
   For Each scol As DataGridViewColumn In mytempDG.Columns
      finrow.add(srow.Cells(scol.Index).Value.ToString)             
   Next
   dataGridView1.Rows.Add(finrow)
Next

Как я могу сначала создать набор данных, прежде чем добавлять его с помощью функции rows.add()? Также могу я узнать, какие данные нужны для rows.add()? Я предполагаю, что это список значений (в моем случае я использовал List(of String)).

Спасибо, ребята, заранее и хорошего дня!


person E-r Gabriel Doronila    schedule 11.11.2014    source источник


Ответы (2)


Вы можете предоставить массив object методу Add метода DataGridView:

For Each srow As DataGridViewRow In mytempDG.Rows
   Dim obj(mytempDG.Columns.Count) as Object
   For col as Integer = 0 to mytempDG.Columns.Count - 1
       obj(col) = srow.Cells(col).Value.ToString()
   Next
   dataGridView1.Rows.Add(obj)
Next

Я предполагаю, что myTempDG является DataGridView, в этом случае вы можете преобразовать строки myTempDG в массив DataGridViewRow, а затем AddRange:

Dim rows() As DataGridViewRow
rows = myTempDG.Rows.Cast(Of DataGridViewRow)().ToArray
dataGridView1.Rows.AddRange(rows)
person Tea With Cookies    schedule 11.11.2014
comment
«Приведение» не является членом «System.Windows.Forms.DatagridviewRowCollection».. Я также пробовал приведение из строки данных.. приведение также не является членом по ошибке - person E-r Gabriel Doronila; 12.11.2014

ЛАДНО, Я ПОНЯЛ

Dim numcol As Integer = mytempDG.Columns.count
Dim finrow(numcol) As String

For Each srow As datagridviewrow In mytempDG.Rows
   For Each scol As DataGridViewColumn In mytempDG.Columns
      finrow(scol.Index) = srow.Cells(scol.Index).Value.ToString            
   Next
   dataGridView1.Rows.Add(finrow)
Next

Но кажется немного медленно..

Это намного лучше.. после того, как решил не передавать набор данных в tempDG..

For each xrow as DataRow in ds.Tables(0).Rows
   datagridview1.Rows.Add(xrow.ItemArray)
Next
person E-r Gabriel Doronila    schedule 11.11.2014
comment
Вы пытались установить Datasource из datagridview1? datagridview1.DataSource = ds Это скопирует строки набора данных в файл dgv. - person Tea With Cookies; 12.11.2014