DataGridView列中的计算

本文关键字:计算 DataGridView | 更新日期: 2023-09-27 17:57:30

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

示例DataGridView:

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

我想在A & B column中输入值或离开当前行后,加上(A+B)。并且还希望将"总计列"设置为ReadOnly

DataGridView列中的计算

您可以在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

您可以轻松完成此

但是您应该有一个数据集或本地数据库连接,如SQL我会假设你得到了它并说出它的名字Totaldataset。

做得很容易,我知道答案太晚了,但也许它能帮助一些新读者。

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

这是一个工作示例:

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列

<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();
}

希望这对你有帮助。