2010-09-15 41 views
2

我有一个包含多个子控件的自定义UserControl,其中包括一个DataGridView。我不想为任何子控件使用EnableDesignMode,而是根据需要公开和序列化它们的属性。我卡在DataGridView的DataSource属性上。编辑器编辑UserControl中DataGridView的DataSource属性

是否需要制作自定义UITypeEditor并使用反射来查找父窗体上的所有BindingSource对象以供选择,或者我可以以某种方式调用此类型的内置编辑器?更改DataGridView的DataSource时编辑器调用的是哪种类型?

编辑:其实,奥利弗的建议并没有完全解决。当我选择我的UserControl时,我确实在属性网格中获取了可绑定对象的列表,并且在选择绑定源后,绑定数据集的列出现在网格上,但编辑Columns集合后datagridview的列未序列化为designer.cs 。但是,如果为此datagridview构建自定义ParentControlDesigner和EnableDesignMode,则可以通过它的DesignerVerb设置绑定,然后在编辑后对Columns集合进行序列化。

我暴露的datagridview的列和DataSource属性以这种方式

[Editor(typeof(CollectionEditor), typeof(UITypeEditor))] 
[Category("Grid")] 
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
public DataGridViewColumnCollection Columns 
{ 
    get { return dgvListaBaza.Columns; } 
} 

[AttributeProvider(typeof(IListSource))] 
[Browsable(true)] 
[Category("Grid")] 
public object DataSource 
{ 
    get { return dgvList.DataSource; } 
    set { dgvList.DataSource = value; } 
} 

是什么,当我点击控制的本地的DesignerVerb和一个通过公开的属性的方式数据源之间的差设置?在我选择一个绑定后,它们都会在网格中显示bindingSource的列,但在后一种情况下Columns不会被序列化,就好像在设置DataSource时还需要其他设置一样。

此外,在曝光栏DesignerSerializationVisibility属性没有区别,而在CollectionEditor列名取决于我设置DataSource(如果它是通过本机的DesignerVerb设置的方式不同,那么它们被命名为SomeColumnDataGridViewTextBoxColumn,如果它是通过属性设置,然后每列的Name属性为空)。

回答

1
+0

[AttributeProvider(typeof(IListSource))]做了诡计!谢谢。 – 2010-09-16 09:55:31

+0

其实,不太...请参阅编辑。 – 2010-09-16 13:30:58