bhb12345 2015-09-07 11:43 采纳率: 100%
浏览 1778
已采纳

DisplayMember 如果自动感知 DataSource 中的字段名称

做了一个控件,将Label 和 ComboBox 组合在一起,其中 Label 用于显示标题,ComboBox 与后端数据表的字段相连,显示字段的内容。控件样式如下:
图片说明

现在合在一起的新控件,有属性 "DataSource" / "DisplayMember" / "ValueMember",该属性与单个控件中的 ComboBox 中对应属性完全相同,希望新控件实例化后与原单独 ComboBox 一样,能有自动的窗体数据源感知和数据表字段感知功能。经过反复测试, DataSource 能感知窗体中的数据源,设定如下:
[Description("数据源"), Category("数据")]
[RefreshProperties(RefreshProperties.Repaint)]
[AttributeProvider(typeof(IListSource))]
public object DataSource
{
get { return this.comboBox1.DataSource; }
set { comboBox1.DataSource = value; }
}

但 DisplayMember / ValueMember 用如下的程序,无法在 DataSource 确定的情况下,自动感知该数据源的字段!!:

[Description("显示的绑定字段"), Category("数据")]
public string DisplayMember
{
  get { return this.comboBox1.DisplayMember; }
  set { this.comboBox1.DisplayMember = value; }
}


[Description("值的绑定字段"), Category("数据")]
public string ValueMember
{
  get { return this.comboBox1.ValueMember; }
  set { this.comboBox1.ValueMember = value; }
}

希望达到的效果(单个 ComboBox 情况下):
图片说明
图片说明

目前错误的效果:

图片说明
选定 DataSource 后,DisplayMember 没有任何变化,不会出现下拉框。

求助:这个应该如何设计????

  • 写回答

6条回答 默认 最新

  • bhb12345 2015-09-07 13:24
    关注

    谢谢,我已经测试出来了,用如下的办法:
    [Description("控件绑定到的数据源的字段"), Category("数据")]
    [TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design,Version = 4.0.0.0 , Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a")]
    [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version = 4.0.0.0 , Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a" , typeof(UITypeEditor))]
    public string DataField
    {
    get { return MyLabel.DataField; }
    set { MyLabel.DataField = value; }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容