2017-03-05 16 views
1

我正在爲自己的MyDataGridView控件開發自己的列。如何在設計時在編輯列對話框窗體上設置不可見的標準DataGridViewColumns

using System; 
using System.ComponentModel; 
using System.Drawing; 
using System.Text; 

namespace WindowsFormsApplication1 
{ 
    public class MyDataGridView : System.Windows.Forms.DataGridView 
    { 
    } 

    public class MyDataGridViewComboBoxColumn : System.Windows.Forms.DataGridViewComboBoxColumn 
    { 
    } 

    public class MyDataGridViewTextBoxColumn : System.Windows.Forms.DataGridViewTextBoxColumn 
    { 
    } 

    public class MyDataGridViewCheckBoxColumn : System.Windows.Forms.DataGridViewCheckBoxColumn 
    { 
    } 

    public class MyDataGridViewButtonColumn : System.Windows.Forms.DataGridViewButtonColumn 
    { 
    } 

    public class MyDataGridViewLinkColumn : System.Windows.Forms.DataGridViewLinkColumn 
    { 
    } 

    public class MyDataGridViewImageColumn : System.Windows.Forms.DataGridViewImageColumn 
    { 
    } 
} 

我想知道,如果它可以隱藏標準的DataGridView列,在System.Windows.Forms的定義,在編輯列在設計時對話框的形式,這樣我就可以用我自己的列只工作。

回答

1

我出來了這個。下面

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public class MyDataGridView : System.Windows.Forms.DataGridView 
    { 
     public override ISite Site 
     { 
      get 
      { 
       return base.Site; 
      } 
      set 
      { 
       base.Site = value; 

       if (Site != null) 
       { 
        IDesignerHost host = (IDesignerHost)Site.GetService(typeof(IDesignerHost)); 
        if (host != null) 
        { 
         host.RemoveService(typeof(ITypeDiscoveryService)); 
         host.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService()); 
        } 
       } 
      } 
     } 

     static readonly Type[] columnTypes = new Type[] 
       { 
        typeof(MyDataGridViewButtonColumn), 
        typeof(MyDataGridViewCheckBoxColumn), 
        typeof(MyDataGridViewLinkColumn), 
        typeof(MyDataGridViewImageColumn), 
        typeof(MyDataGridViewComboBoxColumn), 
        typeof(MyDataGridViewTextBoxColumn) 
       }; 

     class TypeDiscoveryService : ITypeDiscoveryService 
     { 
      ICollection ITypeDiscoveryService.GetTypes(Type baseType, bool excludeGlobalTypes) 
      { 
       return columnTypes; 
      } 
     } 

    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewComboBoxColumn : System.Windows.Forms.DataGridViewComboBoxColumn 
    { 
    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewTextBoxColumn : System.Windows.Forms.DataGridViewTextBoxColumn 
    { 
    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewCheckBoxColumn : System.Windows.Forms.DataGridViewCheckBoxColumn 
    { 
    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewButtonColumn : System.Windows.Forms.DataGridViewButtonColumn 
    { 
    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewLinkColumn : System.Windows.Forms.DataGridViewLinkColumn 
    { 
    } 

    [System.Windows.Forms.DataGridViewColumnDesignTimeVisible(true)] 
    public class MyDataGridViewImageColumn : System.Windows.Forms.DataGridViewImageColumn 
    { 
    } 




} 

圖片示出了代碼

enter image description here

的結果
相關問題