代码之家  ›  专栏  ›  技术社区  ›  Khadaji

用户控件的数据源

  •  11
  • Khadaji  · 技术社区  · 16 年前

    我正在构建一个用户控件。目前,它由一个文本框和一个按钮组成,作为一种学习体验。这将被用作更有用的控制的基础。

    我想添加DataSource、显示成员和ValueMember。
    这是我的数据源代码。它将显示在“属性”编辑器中,但被禁用并显示为灰色。我错过了什么?

        private object MyDataSource;
    
        [Browsable(true)]
        [TypeConverter("System.Windows.Forms.Design.DataSourceConverter")]
        [System.ComponentModel.Bindable(true)]
        public object DataSource
        {
            get
            {
                return MyDataSource;
            }
            set
            {
                if (MyDataSource != value)
                    MyDataSource = value;
            }
        }
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   Marc Gravell    16 年前

    一个更简单的选择可能是使用属性提供者:

    [AttributeProvider(typeof(IListSource))]
    

    您可以尝试使用程序集限定名吗?并指定编辑器?

    [TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    [Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    

    实际上,只需指定程序集,您就可以将其缩写为与版本无关:

    [TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design")]
    [Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design", typeof(UITypeEditor))]
    
        2
  •  4
  •   Talha Anwer    7 年前

    我向Control类添加了ComplexBindingProperties属性,并向DataSource属性添加了AttributeProvider

    [ComplexBindingProperties("DataSource", "DataMember")]
    public partial class SomeListControl : UserControl
    

    ...

    [Category("Data")]
    [Description("Indicates the source of data for the control.")]
    [RefreshProperties(RefreshProperties.Repaint)]
    [AttributeProvider(typeof(IListSource))]
    public object DataSource
    {
        get { return _ultraGrid.DataSource; }
        set { _ultraGrid.DataSource = value; }
    }
    
    [Category("Data")]
    [Description("Indicates a sub-list of the data source to show in the control.")]
    [Editor("System.Windows.Forms.Design.DataMemberListEditor, System.Design", typeof(UITypeEditor))]    
    public string DataMember
    {
        get
        {
            return _ultraGrid.DataMember;
        }
    
        set
        {
            _ultraGrid.DataMember = value;
        }
    }
    

    裁判: Apply Attributes in Windows Forms Controls

    推荐文章