假設(shè)有一個(gè)類
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;
其實(shí)值已經(jīng)有了,只是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; } } } }結(jié)果發(fā)現(xiàn)Datagridview列多了

可以指定dataGridView1的AutoGenerateColumns屬性為false,讓datagridview不自動生成列。(要在綁定前指定)
新聞熱點(diǎn)
疑難解答
圖片精選