Calculation in DataGridView column

后端 未结 4 1389
离开以前
离开以前 2020-12-05 22:17

I have a DataGridView in which I want to sum up values from two different columns into a third column.

Example DataGridView:

A   B           


        
相关标签:
4条回答
  • 2020-12-05 22:56

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-05 22:58

    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
    
    0 讨论(0)
  • 2020-12-05 22:59

    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.

    0 讨论(0)
  • 2020-12-05 23:22

    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";
    
    0 讨论(0)
提交回复
热议问题