【问题标题】:GridView's RowsAdded event is not workingGridView 的 RowsAdded 事件不起作用
【发布时间】:2011-06-15 05:33:36
【问题描述】:

我有一个 GridView,其中包含 Code、Experience、Salary、Bonus

CodeExperienceSalary 列的数据来自 BindingSource,我需要计算 Bonus 的数据strong> 基于经验薪水

所以我为DataGridView 创建了RowsAdded 事件并添加了以下代码

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 是计算奖金列的正确事件吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我认为你走错了方向。

    从设计的角度来看,向您的数据源添加额外的字段会更简单、更正确吗?
    如果您的数据源是类型化对象的列表,您可以只使用 getter 添加一个属性。

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

    如果您的数据源是DataSet/DataTable,您可以添加计算列。

    【讨论】:

    • 我应该在哪里添加这个属性?我应该将它添加到 Employee 类中吗?我的数据源是类型化对象的列表。
    • @Searock - 是的,我想是的。但不能确定,因为我不知道你的 Employee 类到底是做什么的。如果SalaryEmployee 类的属性,那么Bonus 也应该属于它。
    • 我希望我能做到,但我不是 Employee 类的作者,所以我没有添加属性的选项。
    • @Searock - 你总是可以对 Employee 类进行包装。它仍然比在 UI 中管理业务逻辑要好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多