gpt4 book ai didi

c# - 设计器编辑 UserControl 中 DataGridView 的 DataSource 属性

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:52 24 4
gpt4 key购买 nike

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

我是否需要制作一个自定义的 UITypeEditor 并使用反射来查找父表单上的所有 BindingSource 对象以供选择,或者我是否可以以某种方式调用这种类型的内置编辑器?更改 DataGridView 的数据源时调用什么类型的编辑器?

编辑:实际上,奥利弗的建议并没有完全奏效。当我选择我的 UserControl 时,我确实在属性网格中获得了可绑定(bind)对象的列表,在我选择了一个绑定(bind)源之后,绑定(bind)数据集的列出现在网格上,但是 datagridview 的列在编辑 Columns 集合后没有序列化到 designer.cs .但是,如果我为此 datagridview 构建自定义 ParentControlDesigner 和 EnableDesignMode,我可以通过它的 DesignerVerb 设置绑定(bind),然后在编辑后序列化 Columns 集合。

我以这种方式暴露了 datagridview 的 Columns 和 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; }
}

单击控件的 native designerverb 时设置 DataSource 的方式与通过公开属性设置的方式有何区别?在我选择绑定(bind)后,两者都在网格中显示绑定(bind)源的列,但在后一种情况下,列不会被序列化,就好像在设置数据源时我还需要设置其他东西一样。

此外,暴露的列上的 DesignerSerializationVisibility 属性没有区别,并且 CollectionEditor 中的列名称根据我设置数据源的方式而不同(如果它是通过 native designerverb 设置的,那么它们被命名为 SomeColumnDataGridViewTextBoxColumn,如果它被设置通过该属性,则每一列的Name属性为空)。

最佳答案

关于c# - 设计器编辑 UserControl 中 DataGridView 的 DataSource 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com