我有以下DataGrid(用罗马尼亚语编写):
我想用这个公式计算“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;
}
}
现在,我的问题是:如何用好数据填充行上的特定单元格?
答案 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栏中看到计算结果。您可以扩展代码以处理空值以避免运行时错误。