VB.NET中For循环内If语句异常:同时输出目标值与0.00的解决方法
解决VB.NET For循环中If条件重复绘制的问题
我懂你遇到的麻烦了——现在你的代码在每一行循环时都会执行两个独立的If-Else块,这就导致了尴尬的情况:
- 当遍历到"Admmission Fees"的行时,第一个If会绘制对应数值,但第二个If因为不匹配,会在Term Fees的位置画"0.00"
- 当遍历到"Tearm Fees"的行时,第二个If会绘制对应数值,但第一个If又会在Admission Fees的位置画"0.00"
- 最终两个位置会被多次覆盖,出现你看到的「同时显示对应值和0.00」的问题
正确的思路应该是:先把两个费用的默认值设为"0.00",遍历所有行找到对应的费用后更新变量,最后只统一绘制一次结果,而不是每一行都绘制一遍。
修改后的代码如下:
' 初始化两个费用的默认值为0.00 Dim admissionFee As String = "0.00" Dim termFee As String = "0.00" ' 遍历所有行,匹配到对应费用就更新变量 For i As Integer = 0 To DataGridView1.Rows.Count - 1 Dim cellValue As Object = DataGridView1.Rows(i).Cells(0).Value ' 先判断单元格值是否为空,避免空引用异常 If cellValue IsNot Nothing Then Select Case cellValue.ToString().Trim() Case "Admmission Fees" ' 空值合并运算符确保单元格为空时仍显示0.00 admissionFee = DataGridView1.Rows(i).Cells(2).Value?.ToString() ?? "0.00" Case "Tearm Fees" termFee = DataGridView1.Rows(i).Cells(2).Value?.ToString() ?? "0.00" End Select End If Next ' 循环结束后统一绘制结果,每个位置只画一次 e.Graphics.DrawString(admissionFee, New Font("Arial", 10), Brushes.Black, New Point(250, 350)) e.Graphics.DrawString(termFee, New Font("Arial", 10), Brushes.Black, New Point(250, 375))
额外优化说明:
- 用
Select Case替代多个独立If,逻辑更清晰易维护 - 添加了空值判断,避免运行时出现
NullReferenceException - 统一在循环结束后绘制,彻底解决重复覆盖的问题
- 用
?.和??运算符处理单元格为空的边界情况,让代码更健壮
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

