【问题标题】:DataGridView - setting object's displayed value in a columnDataGridView - 在列中设置对象的显示值
【发布时间】:2009-02-24 10:19:18
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net datagridview


    【解决方案1】:

    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 中修改以在运行时展平模型,但真的仅仅为此并不值得。

    【讨论】:

    • 是的,我知道它不应该这样使用 - 我的意思是 datagridview 应该简单地在列中显示对象的属性,但我希望有一些方法来处理它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多