C# WINFORM,自动计算 DataGridView 中的金额:数量*单价=金额解决方法
C# WINFORM,自动计算 DataGridView 中的金额:数量*单价=金额
C# WINFORM,自动计算 DataGridView 中的 金额: 数量*单价=金额
如何更改数量或单价时即时修改金额?在什么事件中写?
数量或单价更改后,重新计算 数量合计和金额合计,应在什么事件中写?
(呵呵,别谈理论,代码说事!)
我在CellValueChanged事件里写如下代码,只有当单元格离开焦点时才计算,另外数量合计和金额合计重复计算,不准确.
private void dgvStock_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dgvStock.Rows.Count > 0 && e.RowIndex >= 0)
{
if (dgvStock.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == "Price" || dgvStock.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == "Quantity")
{
try
{
dgvStock.Rows[e.RowIndex].Cells["Amount"].Value = Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Quantity"].Value) * Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Price"].Value);
//txtFNo.Text = dt.Rows.Count.ToString();
}
catch { }
}
//数量或单价更改后,重新计算 数量合计和金额合计
decQuantityTotal = 0.00m;
decAmountTotal = 0.00m;
for (int i = 0; i < dgvStock.Rows.Count; i++)
{
//统计数量合计
try
{
decQuantityTotal += Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Quantity"].Value);
}
catch { }
//统计金额合计
try
{
decAmountTotal += Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Price"].Value);
}
catch { }
}
lblQuantityTotal.Text = decQuantityTotal.ToString();
lblAmountTotal.Text = decAmountTotal.ToString();
}
}
------解决方案--------------------
金额是只有当单元格离开焦点时才计算,只能这样,你想输入完后立即计算?
数量和金额合计不能那样算的,要循环列表之后统计
参考http://topic.****.net/u/20120201/09/735e5496-dd45-454d-8fec-de391558ef7e.html
------解决方案--------------------
呵呵,前几天也用到类似这样的功能,不过我那个更变态,客户要求公式自定义。
我也是在cellchange里处理的,比较卡。
后方发现NetAdvantage的控件支持,比较强大。
C# WINFORM,自动计算 DataGridView 中的 金额: 数量*单价=金额
如何更改数量或单价时即时修改金额?在什么事件中写?
数量或单价更改后,重新计算 数量合计和金额合计,应在什么事件中写?
(呵呵,别谈理论,代码说事!)
我在CellValueChanged事件里写如下代码,只有当单元格离开焦点时才计算,另外数量合计和金额合计重复计算,不准确.
private void dgvStock_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dgvStock.Rows.Count > 0 && e.RowIndex >= 0)
{
if (dgvStock.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == "Price" || dgvStock.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == "Quantity")
{
try
{
dgvStock.Rows[e.RowIndex].Cells["Amount"].Value = Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Quantity"].Value) * Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Price"].Value);
//txtFNo.Text = dt.Rows.Count.ToString();
}
catch { }
}
//数量或单价更改后,重新计算 数量合计和金额合计
decQuantityTotal = 0.00m;
decAmountTotal = 0.00m;
for (int i = 0; i < dgvStock.Rows.Count; i++)
{
//统计数量合计
try
{
decQuantityTotal += Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Quantity"].Value);
}
catch { }
//统计金额合计
try
{
decAmountTotal += Convert.ToDecimal(dgvStock.Rows[e.RowIndex].Cells["Price"].Value);
}
catch { }
}
lblQuantityTotal.Text = decQuantityTotal.ToString();
lblAmountTotal.Text = decAmountTotal.ToString();
}
}
------解决方案--------------------
金额是只有当单元格离开焦点时才计算,只能这样,你想输入完后立即计算?
数量和金额合计不能那样算的,要循环列表之后统计
参考http://topic.****.net/u/20120201/09/735e5496-dd45-454d-8fec-de391558ef7e.html
------解决方案--------------------
呵呵,前几天也用到类似这样的功能,不过我那个更变态,客户要求公式自定义。
我也是在cellchange里处理的,比较卡。
后方发现NetAdvantage的控件支持,比较强大。