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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:21