Я пытаюсь сохранить точную копию DataGridViewRow в теге той же строки, все работает нормально, и результаты такие, как должны быть... за исключением того, что когда я пытаюсь получить значение, используя имя столбца (в последней строке код), он говорит мне, что имя столбца не существует. Но если я использую индекс, все работает нормально.
Я пробовал использовать метод CreateCells() или Clone() структуры исходной таблицы, но все равно не работает.
Я мог бы придерживаться использования index. Но я бы предпочел получить значения по имени столбца. это возможно?
''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.
Имя параметра: имя_столбца')
.Tag
являетсяObject
. Поможет ли это, если вы произнесете это так:MessageBox.Show(DirectCast(DGV.Rows(0).Tag, DataGridViewRow).Cells("No1").Value)
? Кроме того, вы должны использоватьOption Strict On
. - person Andrew Morton   schedule 13.09.2019