C# WINFORM,自动计算 DataGridView 中的金额:数量*单价=金额

hiwcn 2012-07-17 08:33:36
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();
}
}
...全文
1098 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
万霞诗涵 2014-08-26
  • 打赏
  • 举报
回复
decimal decQuantityTotal = 0.00m; decimal decAmountTotal = 0.00m; 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(); //数量或单价更改后,重新计算 数量合计和金额合计 for (int i = 0; i < dgvStock.Rows.Count; i++) { //统计数量合计 try { decQuantityTotal += Convert.ToDecimal(dgvStock.Rows[i].Cells["Quantity"].Value); } catch { } //统计金额合计 try { decAmountTotal += Convert.ToDecimal(dgvStock.Rows[i].Cells["Price"].Value); } catch { } } lblQuantityTotal.Text = decQuantityTotal.ToString(); lblAmountTotal.Text = decAmountTotal.ToString(); } catch { } } } } 修改成这样更好吧,不过还是非常感谢
xcf007 2012-08-28
  • 打赏
  • 举报
回复
呵呵,前几天也用到类似这样的功能,不过我那个更变态,客户要求公式自定义。

我也是在cellchange里处理的,比较卡。

后方发现NetAdvantage的控件支持,比较强大。
hiwcn 2012-08-28
  • 打赏
  • 举报
回复
想单元格得到类似TextBox控件的TextChanged事件效果一样,单价或数量的值一改变,立即更改金额的值.而不是离开单元格时才修改金额的值 .
熙风 2012-07-17
  • 打赏
  • 举报
回复
金额是只有当单元格离开焦点时才计算,只能这样,你想输入完后立即计算?


数量和金额合计不能那样算的,要循环列表之后统计

参考http://topic.csdn.net/u/20120201/09/735e5496-dd45-454d-8fec-de391558ef7e.html
  • 打赏
  • 举报
回复
我觉得你描述的似乎很模糊,能具体点不,你DATAGRIDVIEW显示的是数据库上的表吗?还是什么的,至少也给个上个图,详细说下。
  • 打赏
  • 举报
回复
在sql语句中算不是更好吗
hiwcn 2012-07-17
  • 打赏
  • 举报
回复
代码更正后,但仍是改完数量或单价,当光标离开所修改值的单元格才能得到金额、金额合计、数量合计。

感觉就是事件没先对。

更正后的代码:

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[i].Cells["Quantity"].Value);
}
catch { }
//统计金额合计
try
{
decAmountTotal += Convert.ToDecimal(dgvStock.Rows[i].Cells["Amount"].Value);
}
catch { }
}
lblQuantityTotal.Text = decQuantityTotal.ToString();
lblAmountTotal.Text = decAmountTotal.ToString();
}
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧