2017-10-07 29 views
1

我创建了一个UserControl,其中一个属性名为DataSource。该代码是这样的:用户控制 - 从数据源的属性名称列表中挑选属性值

public partial class MyUserControl : UserControl 
{ 
    public MyUserControl() 
    { 
     InitializeComponent(); 
    } 
    private object MyDataSource; 

    [Browsable(true)] 
    [System.ComponentModel.Bindable(true)] 
    [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")] 
    public object DataSource 
    { 
     get 
     { 
      return MyDataSource; 
     } 
     set 
     { 
      if (MyDataSource != value) 
       MyDataSource = value; 
     } 
    } 
} 

现在我可以从下拉的设计时间列表中选择DataSource属性的值作为图像显示:

DataSource property in properties pan

现在我究竟想要的是另一属性DataColumn,当DataSource已设置为DataTable时,用户可以从属性的下拉列表中选择DataTable的列中的某一列,以在“DataColumn”属性值的设计时显示。显然,当DataSource已更改DataCol中的值时UMN的下拉列表必须改变相应

回答

1

您可以通过以下属性装饰你的财产:

[DefaultValue("")] 
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design")] 
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design", 
    typeof(System.Drawing.Design.UITypeEditor))] 
public string DataColumn{ get; set; } 

在上面的代码中,DataMemberFieldEditor负责显示包含属性名称来接下拉。

另外DataMemberFieldConverter负责将None转换为空字符串,当您从下拉式选取None时。

这就是DisplayMemberListControl属性的工作方式。你可以看看它的source code

+0

感谢您的回答。这显示属性就像我想要的一样。但我怎么可以根据DataSource填充正确的值的组合框? – Moseyza

+0

先选择“DataSource”属性的值,然后选择“DataColumn”属性表单下拉列表的值就足够了。 –

+0

是的!它工作正常...谢谢 – Moseyza

相关问题