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

VB.NET中DataGridView自定义行列及数据填充问题求助

VB.NET DataGridView 数据显示问题解决

我首次使用VB.NET,需要创建一个固定10列、行数可变的DataGridView并在单元格中显示数据。编写了如下代码,但尝试多个数值后仍无法正常工作:

DataGridView1.RowHeadersVisible = True

Dim numColumns As Integer
If Integer.TryParse(word.Text, numColumns) AndAlso numColumns > 0 Then
    DataGridView1.Columns.Clear()
    For i As Integer = 1 To 10
        Dim newColumn As New DataGridViewTextBoxColumn()
        newColumn.HeaderText = i - 1
        newColumn.ReadOnly = True
        DataGridView1.Columns.Add(newColumn)
    Next
    For i As Integer = 0 To numColumns - 1
        If i Mod 10 = 0 AndAlso i > 0 Then
            If DataGridView1.RowCount <= i \ 10 Then
                DataGridView1.Rows.Add()
            End If
        End If
        If DataGridView1.RowCount > i \ 10 Then
            Dim index As Integer = i Mod 10
            If index >= 0 And index < DataGridView1.ColumnCount Then
                DataGridView1.Rows(i \ 10).Cells(index).Value = i
            End If
        End If
    Next
Else
    MsgBox("请输入有效的正整数")
End If

程序运行截图:
程序运行截图

问题分析与修正代码

原代码的行添加逻辑存在漏洞,逐次判断添加行容易出现索引错误。可以通过先计算总行数、一次性创建行再填充数据的方式简化逻辑,避免错误:

DataGridView1.RowHeadersVisible = True

Dim numItems As Integer
If Integer.TryParse(word.Text, numItems) AndAlso numItems > 0 Then
    DataGridView1.Columns.Clear()
    ' 创建10列,列头显示0-9
    For i As Integer = 1 To 10
        Dim newColumn As New DataGridViewTextBoxColumn()
        newColumn.HeaderText = (i - 1).ToString()
        newColumn.ReadOnly = True
        DataGridView1.Columns.Add(newColumn)
    Next

    ' 计算需要的总行数:向上取整(总数据数/10)
    Dim requiredRows As Integer = Math.Ceiling(numItems / 10)
    ' 清空现有行并添加对应行数
    DataGridView1.Rows.Clear()
    DataGridView1.Rows.Add(requiredRows)

    ' 循环填充数据到对应单元格
    For i As Integer = 0 To numItems - 1
        Dim rowIndex As Integer = i \ 10
        Dim columnIndex As Integer = i Mod 10
        DataGridView1.Rows(rowIndex).Cells(columnIndex).Value = i
    Next
Else
    MsgBox("请输入有效的正整数")
End If

修正说明

  • 变量名优化:将numColumns改为numItems,避免与列数概念混淆
  • 行创建逻辑简化:先根据总数据量计算所需行数,一次性创建,避免逐次判断的逻辑误差
  • 清空原有行:避免DataGridView默认空行干扰数据填充
  • 列头文本标准化:将整数转为字符串,确保显示类型正确

内容的提问来源于stack exchange,提问作者Martins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:55:06