在DataGridView列中进行计算

问题描述

| 我有一个DataGridView,我想将两个不同列中的值汇总到第三列中。 示例DataGridView:
A   B   Total
1   2    3
25  35   60
5   -5   0
我只想在
A & B column
中输入值或离开当前行后就总计(A + B)。并且还希望将“总列数”设置为
ReadOnly
。     

解决方法

您可以在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;
    }
}
    ,如果U r使用
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();
}
希望这会帮助你。