Reputation: 15344
I have a DataGridView in which I want to sum up values from two different columns into a third column.
Example DataGridView:
A B Total
1 2 3
25 35 60
5 -5 0
I want to add (A+B) in total, just after entering values in A & B column
or leaving current row. And also want to set Total Column as ReadOnly
.
Upvotes: 4
Views: 41198
Reputation: 191
You could easily do this
But you should have a dataset or localdatabase connection like SQL I will assume that you got it and name it Totaldataset.
Easily done I know it's too late answer but maybe it help some new readers.
Datacolumn column = new Datacolumn ();
column.Columnname = "Total";
Totaldataset.Tables[0].Columns.["Total"].Expression = "a+b";
Upvotes: 6
Reputation: 212
This is a working example:
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;
}
}
Upvotes: 3
Reputation: 3298
You can do that on CellValidatedEvent and you can apply the same method to 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;
}
}
}
You can set column to ReadOnly in the designer, or like this:
dataGridView.Columns["Total"].ReadOnly = true
Upvotes: 10
Reputation: 1354
If U r using data binding using Eval
than U can just create a method there and on that method just sum those two values.
Like
For Column A
<ItemTemplate>
<%# Eval("A")%>
</ItemTemplate>
for column B
<ItemTemplate>
<%# Eval("B")%>
</ItemTemplate>
For Total
<ItemTemplate>
<%# GetTotal(Eval("A"),Eval("B")) %>
</ItemTemplate>
For total method
private string GetTotal(object A,object B)
{
return (A+B).ToString();
}
hope this will help you.
Upvotes: 0