DataGridView - 在列中设置对象的显示值

时间:2009-02-24 10:19:19

标签: c# .net datagridview

我将一些集合绑定到 DataGridView 。 Collection包含 KeyValuePair 对象,其中key是一个字符串,value是我的类 Field 的对象。 DataGridView 显示两列 - 一列包含键,另一列包含值。使用 ToString ()方法显示值( Field 对象)。但我希望它使用其Name属性显示。问题是该列不包含 DisplayMember 属性 我该怎么做?

编辑:我知道我可以覆盖ToString()来返回对象的名称,但我不想这样做。

2 个答案:

答案 0 :(得分:2)

DataGridView(与大多数直接基于列表的绑定一样)只能绑定到行项的直接属性。你可以为此创建一个外观对象?即一个接受该实例并将该名称作为直接属性返回的类:

public string Name {
    get {return innerObject.Name;}
    set {innerObject.Name = value;}
}
// snipped: other properties - Key etc

或者,你可以投射到一个新对象?例如,数据绑定很好地与匿名类型一起工作(至少是只读的):

grid.DataSource = originalData.Select(x=>
    new {x.Key, Name = x.Field.Name}).ToList();

最后,您可以在ComponentModel中进行黑客攻击以在运行时展平模型,但真的仅仅为此而不值得。

答案 1 :(得分:0)

您可以将DataGridView置于虚拟模式(view.VirtualMode = true),并处理CellValueNeeded(可能还有CellValuePushed)事件以访问“Name”属性。这样可以避免创建大量的包装器对象,但确实使代码不那么优雅。