在DataGridView列中计算

我有一个DataGridView,我想在其中将两个不同列的值汇总到第三列。

示例DataGridView:

AB Total 1 2 3 25 35 60 5 -5 0 

我想在A & B column输入值或离开当前行后,总共添加(A + B)。 并且还想将Total Column设置为ReadOnly

您可以在CellValidatedEvent上执行此操作,并且可以将相同的方法应用于RowValidated:

  private void dataGridView_CellValidated(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > -1) { DataGridViewRow row = dataGridView.Rows[e.RowIndex]; string valueA = row.Cells[columnA.Index].Value.ToString(); string valueB = row.Cells[columnB.Index].Value.ToString(); int result; if (Int32.TryParse(valueA, out result) && Int32.TryParse(valueB, out result)) { row.Cells[columnTotal.Index].Value = valueA + valueB; } } } 

您可以在设计器中将列设置为ReadOnly,或者像这样:

 dataGridView.Columns["Total"].ReadOnly = true 

这是一个有效的例子:

 public partial class Form1 : Form { DataGridView _calcDataGridView; public Form1() { InitializeComponent(); _calcDataGridView = new DataGridView(); this.Controls.Add(_calcDataGridView); _calcDataGridView.Dock = DockStyle.Fill; _calcDataGridView.Name = "CalcDataGridView"; _calcDataGridView.CellEndEdit += Calculate; var aColumn = new DataGridViewTextBoxColumn(); aColumn.Name = "AColumn"; aColumn.HeaderText = "A"; _calcDataGridView.Columns.Add(aColumn); var bColumn = new DataGridViewTextBoxColumn(); bColumn.Name = "BColumn"; bColumn.HeaderText = "B"; _calcDataGridView.Columns.Add(bColumn); var totalColumn = new DataGridViewTextBoxColumn(); totalColumn.Name = "TotalColumn"; totalColumn.HeaderText = "Total"; totalColumn.ReadOnly = true; _calcDataGridView.Columns.Add(totalColumn); } private void Calculate(object sender, DataGridViewCellEventArgs e) { object a = _calcDataGridView.CurrentRow.Cells["AColumn"].Value; object b = _calcDataGridView.CurrentRow.Cells["BColumn"].Value; double aNumber = 0; double bNumber = 0; if (a != null) aNumber = Double.Parse(a.ToString()); if (b != null) bNumber = Double.Parse(b.ToString()); _calcDataGridView.CurrentRow.Cells["TotalColumn"].Value = aNumber + bNumber; } } 

如果使用Eval不是U的数据绑定可以在那里创建一个方法,那么只需对这两个值求和。

喜欢

对于A栏

  <%# Eval("A")%>  

对于B列

  <%# Eval("B")%>  

总计

   <%# GetTotal(Eval("A"),Eval("B")) %>  

总方法

 private string GetTotal(object A,object B) { return (A+B).ToString(); } 

希望这会帮助你。

你可以轻松地做到这一点

但是你应该拥有像SQL一样的数据集或本地数据库连接我会假设你得到它并将其命名为Totaldataset。

轻松完成我知道答案太晚了但也许它可以帮助一些新读者。

 Datacolumn column = new Datacolumn (); column.Columnname = "Total"; Totaldataset.Tables[0].Columns.["Total"].Expression = "a+b";