2012-12-12 18 views
1

假設我有一個組合的UserControl(稱爲'ListTable'),由一個標籤,兩個按鈕和一個DataGridView組成。該標籤是DataGridView的標題,兩個按鈕是Add Row和Delete Row,具有基本的明顯功能。在組合UserControl中的設計器上公開DataGridView的Columns屬性

如何在Designer中公開DataGridView的列,以便我可以通過UserControl編輯DataGridView的列,就像編輯DataGridView本身一樣?

WHAT我試着:

經由標題爲形式「列表」的「TableColumn來」的屬性包裝在ListTable DataGridView中的列屬性,與各種屬性值,諸如的各種組合

[DesignerSerializationVisibility (DesignerSerializationVisibility.Content)] 
    [Editor(typeof(TableColumnEditor), 
     typeof(System.Drawing.Design.UITypeEditor))] 
    public List<DataGridViewColumn> TableColumns 
    { 
     get 
     { 
      List<DataGridViewColumn> columns = new List<DataGridViewColumn>(); 
      foreach (DataGridViewColumn col in table.Columns) 
      { 
       columns.Add(col); 
      } 

      return columns; 
     } 
     set 
     { 
      this.table.Columns.Clear(); 

      foreach (DataGridViewColumn col in value) 
      { 
       this.table.Columns.Add(col); 
      } 
     } 
    } 

其中TableColumnEditor是:

class TableColumnEditor : CollectionEditor 
{ 
    public TableColumnEditor(Type type) : base(type) { } 

    public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     object result = base.EditValue(context, provider, value); 
     ((ListTable)context.Instance).TableColumns = (List<DataGridViewColumn>)result; 

     return result; 
    } 
} 

的這一切似乎已工作。其中大部分只是我不完全明白的拼湊而成的拼湊。因此,經典的困境是:我確實需要坐下來了解這些內臟,但是我沒有(工作)時間通過MSDN的更深奧的WinForms文章來做一個不專心,悠閒的流浪漢。上面的代碼是否可挽救?它在正確的方向嗎?

+1

當然這是爲時已晚OP在這個問題得到答案,但爲未來的讀者在這裏你可以找到一個答案:[在UserControl中公開DataGridView的Columns屬性,並通過設計器使其可編輯](http://stackoverflow.com/questions/36787383/expose-columns-property-of-a-datagridview -in-用戶控件和 - 讓 - 它編輯-VI) –

回答

0

這是否幫助:

放一個BindingSource的表格(BindingSource1)上。

將您的DataGridView的數據源設置爲Binding1。

打開設計有問題的表格,並假設你想顯示爲MyObject類的欄目,輸入以下命令:

this.BindingSource1.Datasource = typeof(YourNamespace.MyObject); 
相關問題