GridView的RowsAdded事件无效

时间:2011-06-15 05:33:37

标签: c# winforms gridview .net-4.0 bindingsource

我有一个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。

enter image description here

所以我评论了这个事件中的代码并创建了另一个事件RowStateChanged添加了上面的代码,它运行正常。

enter image description here

RowsAdded事件有什么问题?并且RowStateChanged是计算奖金列的正确事件吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我认为你正走向错误的方向。

从设计的角度来看,为数据源添加额外的字段会更容易,更准确吗? 如果数据源是类型化对象的列表,则只能使用getter添加属性。

 public decimal Bonus
 {
     get { return (Experience < 4 ? 0.08f : 0.12f) * Salary * 12; }
 }

如果数据源为DataSet/DataTable,则可以添加计算列。