我有一个实体类AInfo,这个类又有两个属性A1和A2(A1和A2也是实体类,且A1和A2不包含数组形式的属性)
现在我想显示在Grid中的列是这样的:
A1.Id||A1.Name||A2.Id||A2.Name请问是否有可行的办法?
还是只能再创建一个新的实体类,把A1和A2的属性加进去?请各位帮忙,谢谢!~~

解决方案 »

  1.   

    最简单的就是建一个DataTable,写一个转化器,实现从DataTable转化成你的Entity,以及从Entity转化成DataTable
      

  2.   

    转换成DataTable不就从强类型变成弱类型了吗?这样就将异常从编译时转移到了运行时了,Grid中必须是强类型的.
      

  3.   

    试试加个属性?
    AInfo
    {
       public int A1_Id { get{return this.a1.Id;} set{this.a1.Id = value;}}
       public string A1_Name {get {return this.a1.Name;} set{this.a1.Name = value;}}   public int A2_Id { get{return this.a2.Id;} set{this.a2.Id = value;}}
       public string A2_Name {get {return this.a2.Name;} set{this.a2.Name = value;}}   private A1 a1 = ...;
       private A2 a2 = ...;
    }
      

  4.   

    这样的做法确实可行,还有没有更好的(最好是Override类的ToString方法,或是在实体类中设置输出的属性名)方法?今日结贴
      

  5.   

    ...或是在实体类中设置输出的属性名)方法?
    有倒是有,不过比较复杂,一般用在需要有动态属性的地方。透过TypeDescriptorProvider可以为一个类或类的一个实例指定一个定制的TypeDescriptor。
    透过CustomTypeDesciptor可以暴露出动态的属性(也就是在设计期还没有的属性)。
    PropertyGrid和DataGridView都支持这些动态属性。如果你非常感兴趣可以看MDSN的文档和文章,它们基本都在System.ComponentModel命名空间下。
    不过要有耗上几天的心理准备。
      

  6.   

    顺便说一下,对属性的名字显示可以用DisplayNameAttribute来指定:class AInfo
    {
       [DisplayName("Id of A1")]            //<---
       public int A1_Id 
       { 
          get{return this.a1.Id;} 
          set{this.a1.Id = value;}
       }
    }