Vb.net 如何检索新声明的DataGridViewRow';是否按列名(而不是按索引)显示s值?
我正在尝试将DataGridViewRow的一个精确副本存储到同一行的标记中,一切正常,结果应该是。。。除了当我尝试使用列名(在代码的最后一行)检索值时,它告诉我列名不存在。但是如果我使用索引,一切都很好 我尝试过使用CreateCells()或Clone()方法修改原始表的结构,但仍然不起作用 我可以坚持使用索引。但我更喜欢按列名获取值。可能吗Vb.net 如何检索新声明的DataGridViewRow';是否按列名(而不是按索引)显示s值?,vb.net,datagridviewrow,Vb.net,Datagridviewrow,我正在尝试将DataGridViewRow的一个精确副本存储到同一行的标记中,一切正常,结果应该是。。。除了当我尝试使用列名(在代码的最后一行)检索值时,它告诉我列名不存在。但是如果我使用索引,一切都很好 我尝试过使用CreateCells()或Clone()方法修改原始表的结构,但仍然不起作用 我可以坚持使用索引。但我更喜欢按列名获取值。可能吗 ''Create and populate a datagridview with one row Dim DGV As New D
''Create and populate a datagridview with one row
Dim DGV As New DataGridView
DGV.Columns.Add("No1", "No1")
DGV.Columns.Add("No2", "No2")
DGV.Columns.Add("No3", "No3")
Dim Objects As New List(Of Object)
Objects.Add("1")
Objects.Add("2")
Objects.Add("3")
DGV.Rows.Add(Objects.ToArray)
'' Loop to store a copy of itself into the Row's Tag
For Each selectedrows As DataGridViewRow In DGV.Rows
Dim DataGridViewRow As New DataGridViewRow
Dim CellArray As New List(Of Object)
DataGridViewRow.CreateCells(DGV) ''I have tried DataGridViewRow = selectedrow.clone and it still doesnt work
For Each Cell As DataGridViewCell In selectedrows.Cells
CellArray.Add(Cell.Value)
Next
DataGridViewRow.SetValues(CellArray.ToArray)
selectedrows.Tag = DataGridViewRow
Next
DGV.Rows(0).Cells(0).Value = "Change"
MessageBox.Show(DGV.Rows(0).Cells(0).Value) ''Works (Output: Change)
MessageBox.Show(DGV.Rows(0).Tag.Cells(0).Value) ''Works (Output: 1)
MessageBox.Show(DGV.Rows(0).Cells("No1").Value) ''Works (Output: Change)
MessageBox.Show(DGV.Rows(0).Tag.Cells("No1").Value) ''Doesnt Work (Output: System.ArgumentException: 'Column named No1 cannot be found.
参数名称:columnName')如果您试图更改行,该怎么办:
Dim rwIdx = 0
For Each selectedrows As DataGridViewRow In DGV.Rows
Dim myDataGridViewRow As New DataGridViewRow
myDataGridViewRow = DGV.Rows(rwIdx)
rwIdx = rwIdx + 1
selectedrows.Tag = myDataGridViewRow
Next
以上仅引用同一行,而不是克隆数据,下面,我将把selectedrows复制到另一个datagridview:
Dim DGV As New DataGridView
DGV.Columns.Add("No1", "No1")
DGV.Columns.Add("No2", "No2")
DGV.Columns.Add("No3", "No3")
Dim Objects As New List(Of Object)
Objects.Add("1")
Objects.Add("2")
Objects.Add("3")
DGV.Rows.Add(Objects.ToArray)
'' Loop to store a copy of itself into the Row's Tag
Dim DataGridViewRow As New DataGridViewRow
Dim myRowIdx As Integer = 0
For Each selectedrows As DataGridViewRow In DGV.Rows
DataGridViewRow = New DataGridViewRow
Dim dgv2 As New DataGridView
For Each col As DataGridViewColumn In DGV.Columns
dgv2.Columns.Add(DirectCast(col.Clone, DataGridViewColumn))
Next
For Each Cell As DataGridViewCell In selectedrows.Cells
dgv2.Rows(0).Cells(Cell.ColumnIndex).Value = Cell.Value
Next
selectedrows.Tag = dgv2.Rows(0)
Next
MessageBox.Show(DGV.Rows(0).Cells(0).Value.ToString) ''Works (Output: 1)
MessageBox.Show(DirectCast(DGV.Rows(0).Tag, DataGridViewRow).Cells(0).Value.ToString) ''Works (Output: 1)
DGV.Rows(0).Cells(0).Value = "Change"
MessageBox.Show(DGV.Rows(0).Cells(0).Value.ToString) ''Works (Output: Change)
MessageBox.Show(DirectCast(DGV.Rows(0).Tag, DataGridViewRow).Cells(0).Value.ToString) ''Works (Output: 1)
MessageBox.Show(DGV.Rows(0).Cells("No1").Value.ToString) ''Works (Output: Change)
MessageBox.Show(DirectCast(DGV.Rows(0).Tag, DataGridViewRow).Cells("No1").Value.ToString) ''Works (Output: 1)
.Tag
属性是一个对象
。如果您这样强制转换它是否有帮助:MessageBox.Show(DirectCast(DGV.Rows(0).Tag,DataGridViewRow.Cells(“No1”).Value)
?另外,您应该使用。您好,谢谢您的回复,我已经尝试了您的建议,并且出现了相同的错误消息。啊。。。。复制单元格时您没有命名列。嗯,我已经在DGV.columns.add(ColumnName,ColumnHeaderText)中命名了列。我假设当我使用createcells方法时,它会将所有模板复制到DataGridViewRow中。如何命名这些列?快速查看文档后,我找不到任何建议您可以命名的内容。您可以创建一个字典(字符串、整数)来从名称中获取列索引。OP需要一个行的副本,而不是对它的引用。我已经添加了一些行作为另一种方法,但我认为这仍然不能满足OP需要的精确副本,只需让它工作即可。