我有一个包含多个子控件的自定义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属性为空)。
[AttributeProvider(typeof(IListSource))]做了诡计!谢谢。 – 2010-09-16 09:55:31
其实,不太...请参阅编辑。 – 2010-09-16 13:30:58