我有一个从数据表绑定的datagridview.我有一个计算的列linetotal,倍数unitprice *数量.
我还有一个totalprice标签,我想在datagridview中包含linetotal列的总和.
当用户对unitprice或quantity进行任何更改时,该linetotal应该更新该行,而totalprice标签应该对linetotal列求和.
我似乎无法找到用于计算总价标签的正确事件.我尝试过cellvaluechanged,currentcelldirtystatechanged,rowleave.他们似乎都没有正常工作.我想我需要在计算完所有的linetotal列之后触发的事件.
我的伪代码:
dt = getallitems(itemnumber);
dt.Columns.Add("LineTotal", typeof(double));
dt.Columns["Linetotal"].Expression = "[unitprice] * [quantity]";
dgv.DataSource = dt;
private void dgv_WhatEventToUse???(object sender, DataGridViewCellEventArgs e)
{
//method to iterate the rows of the datagridview, and sum linetotal column
}
必须有一些事件在计算列的值更改时触发.
最佳答案 您的问题似乎来自于您的计算列是DataTable的一部分而不是DataGridView的一部分.我不确定DataGridView是否会在dgv的基础数据源发生变化时公开事件.有DataGridView.DataSourceChanged事件,但实际上只在实际设置DataSource属性时触发,而不是在DataTable随计算发生变化时触发.
如果您想在不改变代码结构的情况下使其工作,请订阅DataTable的RowChanged事件,您可以扫描dgv并从那里更新您的标签.它不是一个干净的解决方案,但它的工作原理.如果这是一个选项,我会考虑切换到DataGridView中的计算列.