【发布时间】:2016-11-21 20:44:54
【问题描述】:
我有一个员工类,它的字段类型为 ISalary(接口)。在数据网格视图中,我想显示该 salary,但我得到的是空字段。 有没有办法在数据网格视图中显示“自定义类型字段”?调用 toString 方法会有所帮助,但我不明白该怎么做。 这是我绑定数据的方式:
employeeBindingSource.DataSource = employeesList;
该列表中的所有字段,ofc 不为空。这是我的一些课程,我想显示哪些列表:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public int DepartmentId { get; set; }
// how to display this?
public ISalary Salary { get; set; }
...
}
我做了一些研究,但找不到任何例子。或者可能是不够努力。:/
【问题讨论】:
-
看看这个帖子:How to bind a column from second level list on bindsource in winforms datagridview 或这个帖子:Show Properties of a Navigation Property in DataGridView (Second Level Properties),在这种情况下,您使用的是
ISalary接口,最好的选择是使用CellFormatting或使用ComboBox专栏。 -
如果你想遵循覆盖
ToString,你应该知道ISalary在Salary属性中的实现类型并覆盖该类型的ToString方法,但不是一个好主意,因为就像您使用该类型而不是接口一样,您的应用程序将失去使用ISalary接口的目标。 -
@RezaAghaei 我只是想知道,为什么在不知道具体实现类型的情况下无法覆盖 ToString?我的意思是它应该可以工作.. 是的,如果 ToString 方法没有被覆盖,它不会给出正确的结果,但仍然..
-
接口不能包含实现。实现属于类,如果您知道具体类型,则可以覆盖实现。您也可以使用抽象类型而不是接口,然后抽象类可以覆盖
ToString的实现。您还可以将只读属性添加到Employee类,该类返回一个已知的薪水字符串属性,如下所示:this.Salary.Something。我相信您会在链接的帖子中找到有用的选项:) -
我发布了一个答案作为结论:)
标签: c# .net winforms user-interface