【问题标题】:DataSource for User Control用户控制的数据源
【发布时间】:2009-01-25 21:00:48
【问题描述】:

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

我想添加一个 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;
        }
    }

【问题讨论】:

    标签: c# .net winforms custom-controls


    【解决方案1】:

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

    [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】:

      我将 ComplexBindingProperties 属性添加到我的 Control 类中,并将 AttributeProvider 添加到我的 DataSource 属性中

      [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

      【讨论】:

        猜你喜欢
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        相关资源
        最近更新 更多