1

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

在此处输入图像描述

我想通过这个公式计算列“Valoarea”:

valoarea = Cantitatea * Pret unitar (fara TVA)

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

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

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

4

2 回答 2

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

我想让第三列成为前两列的乘积。这是我覆盖单元格格式的方法。

 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) { }
            }
        }

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

于 2013-04-05T18:06:19.090 回答
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;
        }

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

于 2015-11-18T01:01:44.727 回答