我遇到了这个问题,因为我希望我的代码能够工作,即使我已经在源中添加了新列。我的代码根据源的行数添加一行。我的代码缺乏考虑列数的能力。这是我的代码:
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
上面的代码没问题,因为我有来自tempDG的7列(这是我的数据源btw)。但是,如果我添加了两个列(使其为9),该怎么办?然后我必须编辑源代码(添加“srow.cells(7).value.tostring,srow.cells(8).value ... etc”)
我知道如何遍历列,但我不知道如何将其转换为可由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))。
提前谢谢你们,祝你们度过愉快的一天!
答案 0 :(得分:1)
您可以向object
的{{1}}方法提供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
的数组,然后{{1} }:
DataGridViewRow
答案 1 :(得分:0)
好的我知道了
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