Form_Load中DataGridView列3求和代码失效:TextBox无法显示总价求助
解决DataGridView总价计算不显示的问题
我来帮你排查这个总价无法正常显示的问题,咱们从几个常见的坑入手分析:
1. 列索引搞混了(最可能的原因)
DataGridView的列索引是从0开始计数的!你说的是第3列(总价列),对应的索引应该是2而不是3。很多人会把视觉上的列序号直接当成代码里的索引,这是最容易犯的错误。
把代码里的dgvRow.Cells(3)改成dgvRow.Cells(2)试试。
2. Form_Load事件时机不对
Form_Load触发的时候,你的DataGridView2大概率还没加载完数据!比如如果是通过数据库查询、绑定数据源的方式填充表格,这些操作可能是在Load之后才执行的,这时候遍历Rows根本拿不到有效数据,计算出来的totalValue就是默认的0,自然看不到正确的总价。
解决办法:
- 把这段计算代码放到数据填充完成之后调用,比如数据库查询结束后、DataTable绑定完成后;
- 或者绑定DataGridView的
DataBindingComplete事件,在这个事件里执行计算逻辑。
3. 数据类型转换的隐患
如果总价列的数值不是整数(比如带小数的金额),或者单元格存在空值(DBNull),用CInt转换会出问题:
- 带小数的数值用
CInt会丢失精度,甚至报错; - 如果单元格是DBNull,
CInt直接抛出异常,导致代码中断,TextBox4根本不会被赋值。
优化后的代码可以处理这些情况:
Dim totalValue As Decimal = 0D '用Decimal更适合金额类计算,避免精度丢失 For Each dgvRow As DataGridViewRow In DataGridView2.Rows If Not dgvRow.IsNewRow Then '先判断单元格值有效,再转换 If Not IsDBNull(dgvRow.Cells(2).Value) AndAlso IsNumeric(dgvRow.Cells(2).Value) Then totalValue += Convert.ToDecimal(dgvRow.Cells(2).Value) End If End If Next TextBox4.Text = totalValue.ToString("N2") '格式化保留两位小数,更符合金额显示习惯
4. 控件本身的小问题(概率较低)
可以检查下TextBox4的Visible、Enabled属性是否为True,有没有被其他控件遮挡住,确保控件本身是正常可显示的。
内容的提问来源于stack exchange,提问作者Bap mop
相关产品推荐
相关产品推荐

