DataGridview绑定复杂对象
2024-09-06 21:44:22
假设有一个类
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不自动生成列。(要在绑定前指定)
- 如果字属性只有一个属性要显示,可以直接override字属性的ToString方法。
- msdn上有人用特性实现,不过我试了下貌似不行。http://blogs.msdn.com/b/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx
最新文章
- C#异步方法的使用
- VB.NET中Form窗体运行时,按ESC退出全屏状态
- 四元数(Quaternions)简介
- unity3d插件Daikon Forge GUI 中文教程1-Daikon Forge介绍
- php课程---语句及函数
- Oracle EBS环境下查找数据源(OAF篇)
- 让Visual Studio 2015 支持ASP.NET MVC4.0.0.1
- MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
- 删除select中所有option选项
- pkusc2015
- python进阶学习(一)
- [我所理解的REST] 3.基于网络应用的架构
- 视觉slam学习之路(一)看高翔十四讲所遇到的问题
- OO的奇妙冒险2
- winfrom里面打印类似小票
- 关闭win10一切
- 【机器学习】EM算法详细推导和讲解
- C#解除文件锁定
- GoogLeNet解读
- 《MacTalk&#183;人生元编程》