如何在Datagridview中返回全部/多个单元格地址/引用?

问题描述 投票:0回答:1

这是我的新帖子,但是本论坛主题 78734244 的延续。

我想知道如何获取 Datagridview 中的所有单元格地址/引用。上面的线程是为了 单元格值的任何单个输入都可以在 Datagridview 中获取其各自的单元格地址。

现在我想拥有 DataGridView 的所有单元格地址/引用

即下面的网格 6 9 7 8 1 5 2 4 3

并获取如下列表 6 位于单元格 (0,0) 中 9 位于单元格 (0,1) 中 7 在单元格 (0,2) 中 8 在单元格 (1,0) 中 1 位于单元格 (1,1) 中 5 在单元格 (1,2) 中 2 位于单元格 (2,0) 中 4 在单元格 (2,1) 中 6 在单元格 (2,2) 中 所以为了获得多个单元格引用 首先我创建了数字作为列表

Dim numbers As String() = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}
通过搜索上面的编号,我得到了多个单元格。DataGridview的地址参考

我不知道下面的函数是否正确达到预期的结果。

获取以下所有单元格地址的列表后,我想对更多数据网格视图使用相同的单元格地址 您建议将其存储在列表或数组中吗?

您的帮助将不胜感激 谢谢SSD

Private Sub MultipleCells_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim cellsList As New ArrayList

        For i As Integer = 1 To UBound(numbers)
            Dim cell = mulitpleGetCellAddress(DataGridView1, numbers(i))
            If cell IsNot Nothing Then
                'MessageBox.Show($"Data exists in cell ({cell.RowIndex}, {cell.ColumnIndex})")
                cellsList.Add($"", i & ({cell.RowIndex}, {cell.ColumnIndex})) '& ({cell.RowIndex}, {cell.ColumnIndex}))
            Else
                'MessageBox.Show("Data does not exist!")
            End If
            'i = i + 1
        Next
End Sub 
Private Function mulitpleGetCellAddress(dgv As DataGridView, searchString As String) As DataGridViewCell
    For Each row In dgv.Rows.OfType(Of DataGridViewRow)
        For Each cell In row.Cells.OfType(Of DataGridViewCell)
            If cell.Value.ToString() = searchString Then
                Return cell
            End If
        Next
    Next
    Return Nothing
End Function

made a Blunder in the line 
```cellsList.Add($"", i & ({cell.RowIndex}, {cell.ColumnIndex})) '& ({cell.RowIndex}, {cell.ColumnIndex})) ```
arrays vb.net datagridview row cell
1个回答
0
投票

由于我们正在迭代 UI 元素,因此我们希望限制迭代次数。让我们使用一个返回所有匹配项的迭代器函数,每个单元格只检查一次 - 一旦找到匹配项,

Any
就会停止检查,即使你的想法和这个都是 O(n2),这其中之一是程度较轻。

Private Iterator Function mulitpleGetCellAddress(dgv As DataGridView, searchStrings As IEnumerable(Of String)) As IEnumerable(Of DataGridViewCell)
    For Each row In dgv.Rows.OfType(Of DataGridViewRow)
        For Each cell In row.Cells.OfType(Of DataGridViewCell)
            If searchStrings.Any(Function(s) cell.Value.ToString() = s) Then Yield cell
        Next
    Next
End Function

现在您将拥有与任何所寻找的项目相匹配的单元格列表

Dim cells = mulitpleGetCellAddress(DataGridView1, numbers.Select(Function(n) $"{n}"))
If cells IsNot Nothing Then
    MessageBox.Show($"Data exists in cells {String.Join("; ", cells.Select(Function(c) $"({c.RowIndex}, {c.ColumnIndex})"))}")
Else
    MessageBox.Show("Data does not exist!")
End If
© www.soinside.com 2019 - 2024. All rights reserved.