假設我有一個組合的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文章來做一個不專心,悠閒的流浪漢。上面的代碼是否可挽救?它在正確的方向嗎?
當然這是爲時已晚OP在這個問題得到答案,但爲未來的讀者在這裏你可以找到一個答案:[在UserControl中公開DataGridView的Columns屬性,並通過設計器使其可編輯](http://stackoverflow.com/questions/36787383/expose-columns-property-of-a-datagridview -in-用戶控件和 - 讓 - 它編輯-VI) –