2011-06-15 49 views
1

我有一个GridView包含列代码,经验,工资,奖金GridView的RowsAdded事件不工作

数据代码经验工资列来自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正确的事件来计算奖金列?

谢谢。

回答

2

我认为你的方向是错的。

从设计的角度来看,为了向数据源添加额外的字段,它会更容易,还是更正确的。
如果你的数据源是一个类型化对象的列表,你可以只添加一个属性与getter。

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

如果数据源是DataSet/DataTable你可以添加一个计算列。

+0

我应该在哪里添加此属性?我应该将其添加到Employee类中吗?而我的数据源是输入对象的列表。 – Searock 2011-06-15 05:46:36

+0

@Searock - 是的,我认为是。但不能肯定地说,因为我不知道你的Employee类正是如此。如果“工资”是“雇员”类的属性,那么“奖金”也应该属于它。 – 2011-06-15 05:48:24

+0

我希望我可以做到这一点,但我不是Employee类的作者,所以我没有添加属性的选项。 – Searock 2011-06-15 05:51:52