2011-05-23 41 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