Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView-设置对象';s在列中显示的值_C#_.net_Datagridview - Fatal编程技术网

C# DataGridView-设置对象';s在列中显示的值

C# DataGridView-设置对象';s在列中显示的值,c#,.net,datagridview,C#,.net,Datagridview,我将一些集合绑定到一个DataGridView。集合包含KeyValuePair对象,其中key是字符串,value是我的类字段的对象DataGridView显示两列-一列包含键,另一列包含值。值(字段对象)使用其ToString()方法显示。但我希望使用其名称属性来显示它。问题是该列不包含显示成员属性。 我怎么做 编辑:我知道我可以重写ToString()以返回对象的名称,但我不想这样做。DataGridView(与大多数直接基于列表的绑定一样)只能绑定到行项目的即时属性。您也许可以为此创建一

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

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

DataGridView
(与大多数直接基于列表的绑定一样)只能绑定到行项目的即时属性。您也许可以为此创建一个facade对象?i、 e.接受实例并将名称作为直接属性返回的类:

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

是的,我知道它不应该这样使用-我的意思是datagridview应该只在列中显示对象的属性,但我希望有某种方法来处理它。