簡體   English   中英

為什么DisplayMember不能與ListBox中手動添加的DataRow一起使用?

[英]Why DisplayMember doesn't work with manually added DataRow in ListBox?

這是我手動向this.listBox1.Items添加一些DataRow的東西,並在WinForms Designer中將DisplayMember為列名,但是稍后顯示的只是類型名稱的列表(System.Data ...)。

如何解決這個問題?

碼:

list1.ForEach(x => this.listBox1.Items.Add(x)); //x is DataRow from a filled DataTable

DisplayMemberValueMember僅在使用數據綁定( ListBox.DataSource )時適用。 它們使用可以通過反射或通過.NET組件模型和ICustomTypeDescriptor接口檢索的實際屬性來工作。

如果直接綁定DataTable ,則GetEnumerator方法和IList實現始終返回DataRowView實例而不是DataRow DataRowView實現ICustomTypeDescriptor ,其中DisplayName可以引用列名。

因此,如果您想添加一些自定義過濾列表,建議您從任何來源創建一個。 例如:

listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Value";

var list = Enumerable.Range(1, 10).Select(i => new {Name = i.ToString(), Value = i}).ToList();
listBox1.DataSource = list;

如果存在Name屬性,則將看到其值; 否則,您將看到項目的ToString

但是,如果以編程方式添加項目( ListBox.Items ),則將忽略這些屬性,並且將始終使用項目的ToString

指定要添加到列表框中的列名:

list1.ForEach(x => this.listBox1.Items.Add(x["column_name"]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM