计算DataGrid中的单元格值

时间:2013-04-05 17:39:45

标签: c# winforms datagrid

我有以下DataGrid(用罗马尼亚语编写):

enter image description here

我想用这个公式计算“Valoarea”栏目:

  

valoarea = Cantitatea * Pret unitar(fara T.V.A。)

我的实际代码给了我错误:

private void produseFacturate_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        switch (e.ColumnIndex)
        {
            case 3:
                var row = produseFacturate.Rows[e.RowIndex];

                double qty, price;

                double.TryParse(row.Cells[2].Value.ToString(), out qty);
                double.TryParse(row.Cells[3].Value.ToString(), out price);

                row.Cells[4].Value = (qty * price).ToString();
                break;
        }
    }

现在,我的问题是:如何用好数据填充行上的特定单元格?

2 个答案:

答案 0 :(得分:0)

我假设控件实际上是一个DataGridView?

您可以覆盖CellFormatting事件。这是一个简单的例子:

我创建了一个包含3列的DataGridView。

this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.Column1,
        this.Column2,
        this.Column3});

this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(405, 150);
this.dataGridView1.TabIndex = 1;
this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting);

我想让第3列成为前两列的产物。这是我的方法来覆盖cellformatting。

 private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (this.dataGridView1.Columns[e.ColumnIndex].Name.Equals("Column3"))
            {
                try {
                    this.dataGridView1.Rows[e.RowIndex].Cells[2].Value =  Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells[0].Value) * Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells[1].Value);
                }
                catch (Exception ex) { }
            }
        }

请注意,每当我更改前两列中的值时,都会重新计算第3个。

答案 1 :(得分:0)

如果有人想知道如何在datagridview的单元格中计算值并将结果放在同一行的另一列上,则可以在datagridview的CellEndEdit事件中尝试这种方式:

 if (Convert.ToDecimal(datagridPR.CurrentRow.Cells["price_value"].Value) != 0)
        {
            decimal c_Quantity = Convert.ToDecimal(datagridPR.CurrentRow.Cells["quantity"].Value);
            decimal c_Result = c_Quantity * Convert.ToDecimal(datagridPR.CurrentRow.Cells["price_value"].Value);
            datagridPR.CurrentRow.Cells["amount"].Value = c_Result;
        }

每次按下Enter键或在编辑后离开单元格,都可以立即在amount栏中看到计算结果。您可以扩展代码以处理空值以避免运行时错误。