我有一个GridView,其中包含代码,经验,薪水,奖金
列 代码,体验和薪资列的数据来自BindingSource
,我需要计算奖金的数据基于经验和薪资。
所以我为RowsAdded
创建了DataGridView
个事件,并添加了以下代码
int index = employeeBindingSource.Position;
Employee emp = (Employee)employeeBindingSource.Current;
double bonus = (emp.Experience < 4 ? 0.08f : 0.12f) * emp.Salary * 12;
employeeDataGridView.Rows[index].Cells[3].Value = bonus.ToString("0.00"); //setting value for bonus column
employeeBindingSource.MoveNext();
但我只有两排Bouns。
所以我评论了这个事件中的代码并创建了另一个事件RowStateChanged
添加了上面的代码,它运行正常。
RowsAdded
事件有什么问题?并且RowStateChanged
是计算奖金列的正确事件吗?
感谢。
答案 0 :(得分:2)
我认为你正走向错误的方向。
从设计的角度来看,为数据源添加额外的字段会更容易,更准确吗? 如果数据源是类型化对象的列表,则只能使用getter添加属性。
public decimal Bonus
{
get { return (Experience < 4 ? 0.08f : 0.12f) * Salary * 12; }
}
如果数据源为DataSet/DataTable
,则可以添加计算列。