dev*_*hog 1 c# ado.net winforms
这是我手动添加一些DataRow this.listBox1.Items并在WinForms Designer中设置DisplayMemberto列名称的东西,但是稍后显示的只是类型名称列表(System.Data ...)。
如何解决这个问题?
码:
list1.ForEach(x => this.listBox1.Items.Add(x)); //x is DataRow from a filled DataTable
Run Code Online (Sandbox Code Playgroud)
在DisplayMember与ValueMember仅当您使用数据绑定(适用ListBox.DataSource)。它们使用可通过反射或通过.NET组件模型和ICustomTypeDescriptor接口检索的实际属性来工作。
如果DataTable直接绑定a ,则GetEnumerator方法和IList实现将始终返回DataRowView实例,而不是DataRows。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;
Run Code Online (Sandbox Code Playgroud)
如果Name属性存在,您将看到其值;否则,您将看到ToString的项目。
但是,如果您以编程方式添加项目(ListBox.Items),则会忽略这些属性,并且始终ToString会使用这些项目的。
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |