DevExpress XtraGridView指定列总和无法在TextEdit显示求排查
问题分析与修复方案
代码中的问题点
- 控件名不匹配:
GetSummary方法里错误给textEdit赋值,但实际需要更新的是TotalMaterialsTextEdit,控件名称不一致导致初始值无法正确显示。 - 添加行后未同步汇总:点击添加按钮新增数据行后,没有触发汇总计算并更新
TotalMaterialsTextEdit的值。 - 汇总项添加逻辑冗余:直接调用
Summary.Add可能重复创建汇总项,且配置方式不够严谨。 - 重复绑定数据源:
GetTable已将gridView.DataSource绑定到dt,添加按钮里再次设置OBTAFormGridControl.DataSource = dt属于冗余操作,可能干扰数据同步。 - 初始汇总时机不合理:
FORM_Shown时DataTable为空,此时赋值无实际意义,且控件名错误导致操作无效。
修正后的代码
Public Class FORM Dim dt As New DataTable("Table") Private Sub FORM_Load(sender As Object, e As EventArgs) Handles MyBase.Load InitializeApps() GetTable() GetSummary() ' 移至Load中完成汇总初始化 End Sub Sub GetSummary() ' 先清除已有汇总项,避免重复添加 gridView.Columns("Materials").Summary.Clear() ' 创建并配置汇总项 Dim sumItem As New DevExpress.XtraGrid.GridSummaryItem() sumItem.SummaryType = DevExpress.Data.SummaryItemType.Sum sumItem.DisplayFormat = "{0:0,0}" sumItem.FieldName = "Materials" gridView.Columns("Materials").Summary.Add(sumItem) ' 初始化汇总文本框 UpdateTotalText() End Sub Sub GetTable() dt.Columns.Add("Materials", GetType(Double)) ' 仅绑定一次数据源 OBTAFormGridControl.DataSource = dt gridView.DataSource = dt End Sub Private Sub AddtoTableSimpleButton_Click(sender As Object, e As EventArgs) Handles AddtoTableSimpleButton.Click ' 验证输入有效性,避免异常 If Double.TryParse(MaterialsTextEdit.Text, Dim value) Then dt.Rows.Add(value) ' 添加行后立即更新汇总 UpdateTotalText() Else MessageBox.Show("请输入有效的数字") End If End Sub Private Sub gridView_CellValueChanged(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles gridView.CellValueChanged ' 仅修改Materials列时更新汇总 If e.Column.FieldName = "Materials" Then gridView.UpdateTotalSummary() UpdateTotalText() End If End Sub ' 封装汇总更新逻辑,避免重复代码 Private Sub UpdateTotalText() Dim total As Object = gridView.Columns("Materials").Summary.SummaryValues(DevExpress.Data.SummaryItemType.Sum) ' 处理空表情况,避免空值 Me.TotalMaterialsTextEdit.EditValue = If(total Is DBNull.Value, 0, total) End Sub End Class
关键修改说明
- 统一汇总更新逻辑:新增
UpdateTotalText方法,将获取汇总值并赋值的操作封装,减少重复代码。 - 修正控件指向:所有汇总更新操作均指向
TotalMaterialsTextEdit,确保目标控件正确。 - 添加输入验证:用
Double.TryParse替代Double.Parse,避免无效输入引发异常。 - 优化汇总项初始化:先清除已有汇总项再添加,避免重复创建;通过
GridSummaryItem明确配置汇总参数。 - 移除冗余数据源绑定:仅在
GetTable中设置一次数据源,后续DataTable的变化会自动同步到GridView。 - 事件触发优化:仅当修改Materials列时才更新汇总,减少不必要的计算开销。
内容的提问来源于stack exchange,提问作者DeveloperGuy
相关产品推荐
相关产品推荐

