DataGridview绑定复杂对象

时间:2014-03-05 15:15:21   收藏:0   阅读:365

假设有一个类

bubuko.com,布布扣
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; }
        }
    }
bubuko.com,布布扣

将类绑定到Datagridview

bubuko.com,布布扣
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;
bubuko.com,布布扣

bubuko.com,布布扣

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

bubuko.com,布布扣

bubuko.com,布布扣
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;
                    }
                }
            }
        }
bubuko.com,布布扣

结果发现Datagridview列多了

bubuko.com,布布扣

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

 


DataGridview绑定复杂对象,布布扣,bubuko.com

原文:http://www.cnblogs.com/wocaca/p/3581070.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!