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

