日期:2014-05-18  浏览次数:20951 次

问个关于在派生类中使用LINQ与datagridview绑定的问题
我现在有一个抽象类abstract class A
然后派生出一个A的子类B
实现子类B对象的一个数组B[]
接着用LINQ查询子类B的集合

var m = from c in B[] select c;

最后将m作为数据源与datagridview绑定:datagridview.datasource = m.tolist()

结果在datagridivew的列中只有子类自身的属性,父类的属性全部没有以列的形式显示出来

接着就改:
var m = from c in B[]
select new 
{
别名1 = c.父类中的属性1,
别名2 = c.父类中的属性2
.
.
};

这样可以datagridview中显示出所有的属性

不过问题并没完~结果发现原来直接用datagridivew绑定B[]的时候可以编辑的单元格在用LINQ后所有的单元格都成只读取(所有的get; set;属性都只读)

后来分析应该是LINQ中的select new生成了一个匿名类型导致的,不知道是不是这个原因

请教各位高手这个问题如何解决?

分不够可以加哈~~~只希望能解决问题并学以致用

------解决方案--------------------
第一个问题:父类的属性全部没有以列的形式显示出来 
请将父类中的public字段,重构成属性,就会显示出来.
第二个问题:后来分析应该是LINQ中的select new生成了一个匿名类型导致的,不知道是不是这个原因 
是这个原因.解决方法参见第一个问题.
------解决方案--------------------
另外,建议楼主用WPF Toolkit 中的datagrid控件.而不是host 一个datagridview.
下载地址:http://wpf.codeplex.com/