2011-05-23 75 views
2

我有,我想从两个不同的列综上所述值到第三列一个DataGridView。计算中的DataGridView列

实施例的DataGridView:

A B Total 
1 2 3 
25 35 60 
5 -5 0 

我要添加(A + B)合计,只是在A & B column输入值或离开当前行之后。并且还希望将Total Column设置为ReadOnly

+0

你结合这一个DataTable? – 2011-05-23 12:46:52

+0

不,我不绑定这个任何数据库或表,价值由用户输入。 – 2011-05-23 12:49:02

+1

你试过dataGridView.Columns [“Total”]。ReadOnly = true;使列只读? – Reniuz 2011-05-23 12:59:57

回答

7

你可以做到这一点的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; 
        } 
       } 
      } 

您可以在设计器中设置列只读,或者是这样的:

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

同意,也可以在CellEndEdit事件中完成... – Reniuz 2011-05-23 13:15:35

+0

感谢名单非常........ – 2011-05-23 13:19:36

0

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

喜欢

对于列A

<ItemTemplate> 
<%# Eval("A")%> 
</ItemTemplate> 

对B列

<ItemTemplate> 
<%# Eval("B")%> 
</ItemTemplate> 

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

</ItemTemplate> 

对于总方法

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

希望这会帮助你。

1

这是一个工作示例:

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; 
    } 
} 
0

您可以轻松地做到这一点

但是你应该有一个数据集或本地数据库连接,如SQL 我会假设你知道它并将其命名为 Totaldataset。

很容易做到,我知道一切都太迟了答案,但也许它帮助一些新的读者。

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

DataColumn的列=新的DataColumn(); 列。 Columnname =“Total”; Totldataset.tables [0] .coulmns。[“Total”]。Expression =“a + b”; – 2015-08-27 19:59:26

+0

你可以在任何事件上使用它,比如添加到按钮等等。 – 2015-08-27 20:01:25

+0

谢谢slfan的帮助:) – 2015-08-27 20:32:40