You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataGridView单元格值存储到二维数组(VB.NET)

VB.NET DataGridView 单元格值转数组实现示例

场景1:每添加一行后存储该行单元格值到数组

利用DataGridView.RowsAdded事件,每次新增行时提取该行单元格值存入一维数组,通过动态列表List(Of Object())来存储所有行数据:

' 类级别变量,用于存储每行的单元格值数组
Private rowDataList As New List(Of Object())

Private Sub DataGridView1_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
    ' 获取刚添加的行(排除默认空白新行)
    If DataGridView1.Rows(e.RowIndex).IsNewRow Then Return
    
    Dim newRow As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
    Dim rowValues(newRow.Cells.Count - 1) As Object

    ' 遍历该行单元格提取值,处理DBNull情况
    For i As Integer = 0 To newRow.Cells.Count - 1
        rowValues(i) = If(newRow.Cells(i).Value Is DBNull.Value, Nothing, newRow.Cells(i).Value)
    Next

    rowDataList.Add(rowValues)

    ' 可选:调试输出
    Debug.WriteLine($"已存储第{rowDataList.Count}行:{String.Join(", ", rowValues)}")
End Sub

场景2:所有行添加完成后生成二维数组

当确认所有行添加完毕(比如固定7行),遍历整个DataGridView的行和列,构建强类型二维数组:

Private Function GetFullDataAs2DArray() As Object(,)
    ' 统计有效行数(排除空白新行)
    Dim validRowCount As Integer = If(DataGridView1.Rows.Last().IsNewRow, DataGridView1.Rows.Count - 1, DataGridView1.Rows.Count)
    Dim colCount As Integer = DataGridView1.Columns.Count

    If validRowCount = 0 Then Return Nothing

    ' 初始化二维数组
    Dim fullData(validRowCount - 1, colCount - 1) As Object

    ' 填充数组
    For rowIdx As Integer = 0 To validRowCount - 1
        For colIdx As Integer = 0 To colCount - 1
            fullData(rowIdx, colIdx) = If(DataGridView1.Rows(rowIdx).Cells(colIdx).Value Is DBNull.Value, Nothing, DataGridView1.Rows(rowIdx).Cells(colIdx).Value)
        Next
    Next

    Return fullData
End Function

调用示例(按钮触发)

Private Sub btnGenerateArray_Click(sender As Object, e As EventArgs) Handles btnGenerateArray.Click
    Dim targetRowCount As Integer = 7
    Dim currentValidRows As Integer = If(DataGridView1.Rows.Last().IsNewRow, DataGridView1.Rows.Count - 1, DataGridView1.Rows.Count)

    If currentValidRows <> targetRowCount Then
        MessageBox.Show($"当前有效行数:{currentValidRows},未达到目标{targetRowCount}行")
        Return
    End If

    Dim resultArray As Object(,) = GetFullDataAs2DArray()

    ' 验证输出
    If resultArray IsNot Nothing Then
        For row As Integer = 0 To resultArray.GetLength(0) - 1
            Debug.WriteLine($"第{row + 1}行:{String.Join(", ", Enumerable.Range(0, resultArray.GetLength(1)).Select(Function(col) resultArray(row, col)))}")
        Next
    End If
End Sub

关键说明

  • 处理IsNewRow:DataGridView默认会添加空白新行,统计行数和取值时需排除该行。
  • 空值处理:单元格值可能为DBNull,通过If语句转换为Nothing避免异常。
  • 强类型适配:如果需要特定类型数组(如String(,)),可将Object替换为对应类型,并添加类型转换逻辑。

内容的提问来源于stack exchange,提问作者R SRINIVASAN Srinivasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:22:10