打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DataGridview绑定复杂对象

DataGridview绑定复杂对象

假设有一个类

class Person{private string id;private string name;private Address homeAddr;public string ID{get { return id; }set { id = value; }}public string Name{get { return name; }set { name = value; }}public Address HomeAddr{get { return homeAddr; }set { homeAddr = value; }}}class Address{private string cityname;private string postcode;public string CityName{get { return cityname; }set { cityname = value; }}public string PostCode{get { return postcode; }set { postcode = value; }}}

将类绑定到Datagridview

List<Person> lst = new List<Person>();for (int i = 0; i < 10000; ++i){lst.Add(new Person(){ID = "1",Name = "name",HomeAddr = new Address() { CityName = “CityName”, PostCode = “PostCode ”}});}dataGridView1.DataSource = lst;

其实值已经有了,只是Datagridview不显示。可以通过DataPropertyName指定子属性名字,在CellFormatting事件中通过反射获取。

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e){if ((dataGridView1.Rows[e.RowIndex].DataBoundItem != null) &&(dataGridView1.Columns[e.ColumnIndex].DataPropertyName.Contains("."))){string[] names = dataGridView1.Columns[e.ColumnIndex].DataPropertyName.Split('.');object obj = dataGridView1.Rows[e.RowIndex].DataBoundItem;for (int i = 0; i < names.Count(); ++i){try{var result = obj.GetType().GetProperty(names[i]).GetValue(obj, null);obj = result;e.Value = result.ToString();}catch (Exception){return;throw;}}}}

结果发现Datagridview列多了

可以指定dataGridView1的AutoGenerateColumns属性为false,让datagridview不自动生成列。(要在绑定前指定)

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DataGridView控件用法(一)绑定数据
C# Winform中让DataGridView单元格显示图片 - ailixin_200...
VS2015中DataGridView的DataGridViewComBoboxCell列值无效及数据绑定错误的解决方法
值类型和引用类型 - Omiga - 博客园
DataGridView的添加、编辑、更新 - 太上老君的日志 - 网易博客
C#异步批量下载文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服