[Editor("System.Windows.Forms.Design.DataGridViewColumnCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), Localizable(true), Description("Inner GridView"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("CatData"), MergableProperty(false)]
public DataGridViewColumnCollection Columns
{
      get
      {
            return this.popUpDialog.gridView.Columns;
      }
}
 
我在ComboxBox上公开了上面这个属性。
当设计时,我在属性浏览器点击Columns属性时候,会弹出下面这句话。
Unable to cast object of type 'WindowsApplication1.ExComboBox' to type 'System.Windows.Forms.DataGridView'。注:WindowsApplication1.ExComboBox'是我做的ComboBox的Class名。如果Editor特性不加的话没有这个问题。
但是不能设定Column的ColumnType属性了,这个是必须的。哪位兄弟知道这个问题怎么解决,请指点一下。

解决方案 »

  1.   

    觉得你公开this.popUpDialog.gridView.Columns
    不如公开this.popUpDialog.gridView更适用.你不应使用System.Windows.Forms.Design.DataGridViewColumnCollectionEditor
    做为你的控件ExComboBox属性编辑器,因为这个编辑器是对DataGridView类来使用的.
      

  2.   

    呵呵,您的这个想法我试验过。也不行,公开this.popUpDialog.gridView后,
    除了Columns能在设计时修改,其他都没有问题。
    不信您试试,弹出另外一个消息,说对象没有这个属性怎么的,呵呵。
      

  3.   

    哈哈,说反了,不好意思。
    除了Columns“不能”在设计时修改,其他都没有问题。
      

  4.   

    你要从UITypeEditor类继承一个新的编辑器才行.
    DataGridViewColumnCollectionEditor只能用于DataGridView或可以可以转换为DataGridView的控件使用.
      

  5.   

    是啊,实在不行我是想考虑这个方法。不过要反编译原来的System.Windows.Forms.Design.DataGridViewColumnCollectionEditor参照学习。时间恐怕很长,有时间一定搞搞,呵呵。
    目前这个Columns需要设计时用的需求还不是很多。
    只是极少几个地方。谢谢您。
      

  6.   

    如果你的gridView是DataGridView类型的变量,那么直接用默认的就可以调出DataGrivView的列编辑器了,而不用明确的指定它的编辑器,直接用下面的形式:
    public DataGridViewColumnCollection Columns
    {
          get
          {
                return this.popUpDialog.gridView.Columns;
          }
    }
    因为这个时候返回的是this.popUpDialog.gridView.Columns,而这个Columns直接引用自gridView所以会自动的调用gridView的列编辑器了.