zoukankan      html  css  js  c++  java
  • 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;

    image

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

    image

    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列多了

    image

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


  • 相关阅读:
    微擎使用函数获取用户微信信息
    xshell连接不上linux情况一
    destoon手机端分页
    kvm安装win2012
    kvm安装ubuntu
    KVM的磁盘管理相关
    ubuntu的iptables
    kvm安装win2003
    Centos-6.4 安装mysql-5.5.14
    CentOS 6.4安装bind-9.8.2最新版(DNS服务器)
  • 原文地址:https://www.cnblogs.com/wocaca/p/3581070.html
Copyright © 2011-2022 走看看