Расчет в столбце DataGridView - PullRequest
3 голосов
/ 23 мая 2011

У меня есть DataGridView, в котором я хочу суммировать значения из двух разных столбцов в третий столбец.

Пример DataGridView:

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

Я хочудобавить (A + B) всего сразу после ввода значений в A & B column или выхода из текущей строки.А также хотите установить общий столбец как ReadOnly.

Ответы [ 4 ]

7 голосов
/ 23 мая 2011

Вы можете сделать это в 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
3 голосов
/ 27 августа 2015

Вы могли бы легко сделать это

Но у вас должно быть соединение с набором данных или локальной базой данных, например SQL Я буду предполагать, что вы получили это и назовите это Totaldataset.

Легко, я знаю, что уже слишком поздно, но, возможно, это поможет некоторым новым читателям.

Datacolumn column = new Datacolumn (); 
column.Columnname = "Total"; 
Totaldataset.Tables[0].Columns.["Total"].Expression = "a+b";
1 голос
/ 23 мая 2011

Это рабочий пример:

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 голосов
/ 23 мая 2011

Если 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();
}

надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...