[WinForm] DataGridView如何显示绑定对象的对象属性的属性?

vitachuh 2012-01-08 11:45:09
1. 场景说明
1.1 数据库表间关系:
Employee外键PersonalId关联People;
1.2 People字段:
PersonaleId : string (PK),
Name : string,
Birthday : DateTime
1.3 Employee字段:
EmployeeNo : int (PK),
Level : int,
PersonalId : string (FK)

2. 使用方法
/// 完全由表映射产生对应实体类

List<Employee> emps = new List<Employee>();
/// 从数据库读取Employee数据

BindingSource bs = new BindingSource();
dataGridView.DataSource = bs; // dataGridView type is DataGridView.
bs.DataSource = emps;

3. 问题
绑定数据成功,但是不是按照想象中进行显示。Employee的各个自身属性都显示正常,不知道如何显示Employee对象中的People对象的属性。
我想显示出的数据有:PersonalId, Name, Birthday, EmployeeNo, Level。其中前三个字段来自Employee对象的People属性。

请求大家的帮助,谢谢。
如有描述不清之处,请指正,我再详细解释。
...全文
678 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiwadan 2012-01-26
  • 打赏
  • 举报
回复
楼主,能不能说你怎么解决的呀?
vitachuh 2012-01-12
  • 打赏
  • 举报
回复
搞定。还是自己动手丰衣足食啊。
vitachuh 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wanghui0380 的回复:]
这个东西最好使用两个DataGridView 主从绑定显示

如果非要显示在一个里面其实也没问题,就是要写点代码控制了

1.后面所有的和Employee相关的东西都直接绑定“Employee”

2.挂接DataGridView的formating事件

在该事件里获取 绑定列索引 和e.value值

formating事件(sender,e)
{
if(e.v……
[/Quote]

请问,能具体讲讲主从绑定的细节么?

因为,类是根据表由EF自动生成,如果手动修改了类结构,会导致一些后续问题,比如WCF中传输、表更新等情况。所以,修改Employee类不是很适合当前场景。

wanghui0380 提及的主从绑定想象中貌似很满足,想进一步讨论,请不吝赐教。

之前我是这样做的,有两个DataGridView(dgv1,dgv2),都绑定同一个BindingSource,然后dgv2设置DataMember,令其显示People详细内容,然后讲dgv2的column加到dgv1里面。
调试过程中发现有问题,首先dgv2中只显示了一条数据,而且在加入列的时候提示dgv1中已有同样的列存在。

请忽略我的实现过程,:-)。
lyx266 2012-01-09
  • 打赏
  • 举报
回复
按照5楼的方法确实可以,
formating事件是指 CellFormatting 事件
wanghui0380 2012-01-09
  • 打赏
  • 举报
回复
这个东西最好使用两个DataGridView 主从绑定显示

如果非要显示在一个里面其实也没问题,就是要写点代码控制了

1.后面所有的和Employee相关的东西都直接绑定“Employee”

2.挂接DataGridView的formating事件

在该事件里获取 绑定列索引 和e.value值

formating事件(sender,e)
{
if(e.value==null)
{
retrun;
}
if(e.列索引==你想要设置的列&&e.value is Employee类型)
{
e.value=(e.value as Employee类型).相关属性
}
}

lyx266 2012-01-09
  • 打赏
  • 举报
回复
楼上的方法是常用的方法,基本都是这样用
effun 2012-01-09
  • 打赏
  • 举报
回复
我印象里现有DataGridView的列都是直接读属性的,而不支持使用Eval这种方式,所以象Employee.People.Name这样的值貌似不能直接绑定到列上,不过只要对Employee加工一下就可以用了:

partial class Employee
{
public string PeopleName
{
get { return People.Name; }
set { People.Name = value; }
}
}

这样,只要在DataGridView的列上绑定PeopleName就可以显示People上的Name属性了,其它属性也一样处理吧。
熙风 2012-01-09
  • 打赏
  • 举报
回复
用List集合显示

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧