如何为数据绑定DataGridView编程添加行并实现列总计行
解决绑定数据源的DataGridView添加总计行的问题
兄弟,我太懂你这种绑定了数据源之后没法直接给DataGridView加行的头疼了——毕竟在数据绑定模式下,DataGridView的行是和数据源(比如DataTable)强关联的,直接操作DataGridView.Rows要么报错,要么根本不生效。核心思路得从修改数据源入手,而不是直接改表格本身,下面给你具体的步骤和代码示例:
核心原理
绑定模式下,DataGridView的行完全由绑定的数据源(比如DataTable、List
具体实现步骤(以DataTable为例)
假设你已经完成了各列的总计计算,接下来只需要把总计行插入到数据源中:
确保数据源是可编辑的
如果你的数据源是直接从数据库查询返回的只读DataTable(比如用DataReader填充的),先复制一份可编辑的副本:// originalDt是你从数据库查询得到的原始DataTable DataTable editableDt = originalDt.Copy();创建总计行并赋值
用DataTable的NewRow()方法创建和原表结构一致的行,然后把你计算好的各列总计值填进去:DataRow totalRow = editableDt.NewRow(); totalRow["date"] = "总计"; // 第一列显示“总计”标识 totalRow["num_jobs_pending"] = yourPendingJobsTotal; // 替换成你计算好的该列总和 totalRow["jobs_called"] = yourCalledJobsTotal; totalRow["total_jobs_overall"] = yourOverallJobsTotal; // 其他需要展示总计的列依次赋值将总计行添加到数据源并绑定
把总计行加到DataTable里,再重新绑定到DataGridView(如果已经绑定,DataTable的变更会自动同步到表格):editableDt.Rows.Add(totalRow); // 如果之前已经绑定过,这一步可以省略,表格会自动更新 dataGridView1.DataSource = editableDt;
额外注意事项
- 如果你的数据源用了
BindingSource作为中间层,直接操作BindingSource关联的DataTable即可:BindingSource bs = (BindingSource)dataGridView1.DataSource; DataTable dt = (DataTable)bs.DataSource; // 按照上面的步骤给dt添加总计行即可,BindingSource会自动同步表格 - 总计行只是用于展示,不要把它写回数据库,所以务必在内存中的DataTable里操作,不要直接修改数据库的原始表。
内容的提问来源于stack exchange,提问作者Squaddy
相关产品推荐
相关产品推荐

