你目前的代码在渲染 DataGridView
(GrdList
) 时,出现了只显示最后一行的问题。原因是你在循环中添加新行的操作只发生了一次,而所有数据都被添加到这一行里。
在你的代码中,Dim i = .Rows.Add()
只在 With GrdList
块执行时调用了一次。因此,每次循环都是在修改同一行(即 i
指向的行),导致最后只看到最后一行的结果。
解决方法
你需要在每次遍历 dt.Rows
中的数据时,向 DataGridView
中添加新行。具体做法是在外层的行循环中,每次都添加一行,并更新当前行的索引 i
。
可以将代码修改为如下方式:
vbnet 代码解读复制代码vb
コードをコピーする
If dt.Rows.Count > 0 Then
With GrdList
.Rows.Clear() ' 清空 DataGridView 的所有行
For Each dr In dt.Rows ' 遍历 DataTable 的每一行
Dim i = .Rows.Add() ' 每次都新增一行,返回该行的索引
For Each dc As DataColumn In dt.Columns ' 遍历 DataTable 的每一列
Dim col = .Columns.OfType(Of DataGridViewColumn).FirstOrDefault(Function(x) x.HeaderText = dc.ColumnName)
If col IsNot Nothing Then
' 将每一列的值赋给 DataGridView 对应的单元格
.Rows(i).Cells(col.Index).Value = dr(dc)
End If
Next
Next
End With
End If
修改点
-
将
Dim i = .Rows.Add()
放入For Each dr In dt.Rows
循环:- 每次遍历
DataTable
的行时都添加一行,这样i
变量在每次循环时都指向新添加的那一行。
- 每次遍历
-
在每一行中再遍历所有列:
- 然后将
DataTable
的值逐列插入到对应的DataGridView
列中。
- 然后将
效果
这样修改后,GrdList
将会根据 DataTable
的行数动态添加新行,并正确渲染每一行的数据,而不再只显示最后一行。
你可以在 DataGridView
中遍历列时,检查 HeaderText
是否是 "比重合否" 或 "屈折率合否",然后根据单元格的值将背景颜色设置为红色或黄色。
修改后的代码示例:
vbnet 代码解读复制代码vb
コードをコピーする
If dt.Rows.Count > 0 Then
With GrdList
.Rows.Clear() ' 清空 DataGridView 的所有行
For Each dr In dt.Rows ' 遍历 DataTable 的每一行
Dim i = .Rows.Add() ' 每次都新增一行,返回该行的索引
For Each dc As DataColumn In dt.Columns ' 遍历 DataTable 的每一列
Dim col = .Columns.OfType(Of DataGridViewColumn).FirstOrDefault(Function(x) x.HeaderText = dc.ColumnName)
If col IsNot Nothing Then
' 将每一列的值赋给 DataGridView 对应的单元格
Dim cellValue As String = dr(dc).ToString()
.Rows(i).Cells(col.Index).Value = cellValue
' 判断 HeaderText 是否为 "比重合否" 或 "屈折率合否"
If col.HeaderText = "比重合否" OrElse col.HeaderText = "屈折率合否" Then
If cellValue = "不合格" Then
' 设置单元格背景为红色
.Rows(i).Cells(col.Index).Style.BackColor = Color.Red
ElseIf cellValue = "合格" Then
' 设置单元格背景为黄色
.Rows(i).Cells(col.Index).Style.BackColor = Color.Yellow
End If
End If
End If
Next
Next
End With
End If
关键修改点:
-
判断
HeaderText
:- 使用
If col.HeaderText = "比重合否" OrElse col.HeaderText = "屈折率合否"
来检查列标题是否为 "比重合否" 或 "屈折率合否"。 - 如果列标题匹配,才执行进一步的背景颜色设置操作。
- 使用
-
根据单元格的值设置背景颜色:
- 如果单元格值为
"不合格"
,将背景颜色设置为红色。 - 如果单元格值为
"要確認"
,将背景颜色设置为黄色。
- 如果单元格值为
-
使用
Style.BackColor
:Style.BackColor
用于修改DataGridViewCell
的背景颜色。
效果:
- 在你遍历
DataGridView
的每一行和列时,如果列标题为 "比重合否" 或 "屈折率合否",并且单元格值为"不合格"
或"要確認"
,将会设置该单元格的背景颜色为红色或黄色。
评论记录:
回复评论: