如何将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
相关产品推荐
相关产品推荐

