2011-06-15 51 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