C#组合框数据源绑定类

  • 发布时间:2016年10月19日 11:38
  • 作者:杨仕航
  • 分类标签: C#
  • 阅读(1324)
  • 评论(0)

C#的组合框用起来有些别扭。例如我想显示的值和实际的值不同。只是简单添加列表项是行不通。

可以用绑定数据库的方法实现,但过于麻烦。

若要实现这种功能,可以使用C#提供的另外一种方式:设置DataSource。

这种方式,是给组合框的数据源指定一个数组或List,再指定相关字段。


用这种方法需要先构建一个简单的类:

class ClsComboItem
{
    public string Value { get; set; } //值字段
    public string Display{ get; set; }//显示字段
}

假设组合框的名称为cbmTest,加载数据方法如下:

private void LoadData(){
    List<ClsComboItem> items = new List<ClsComboItem>();
    items.Add(new ClsComboItem{Value = "en", Display = "English"});
    items.Add(new ClsComboItem{Value = "zh", Display = "简体中文"});
    
    cbmTest.DataSource = items;
    cbmTest.ValueMember = "Value";
    cbmTest.DisplayMember = "Display";
}

加载窗体,执行LoadData方法,可以得到这个效果:

若要获取选中的值,可以用组合框的SelectedValue或SelectedItem来获取。

若要设置组合框选择哪个值,可以给SelectedValue设置值。这个在使用上一般没有什么障碍。


我们可以进一步优化一下代码,给ClsComboItem添加构造函数:

class ClsComboItem
{
    public string Value { get; set; } //值字段
    public string Display{ get; set; }//显示字段
    
    //默认构造函数
    public ClsComboItem() { }
    
    //带参数构造函数
    public ClsComboItem(string value, string display)
    {
        this.Display = display;
        this.Value = value;
    }
}

加了构造函数,就可以减少一些代码量:

private void LoadData(){
    List<ClsComboItem> items = new List<ClsComboItem>();
    items.Add(new ClsComboItem("en", "English"));
    items.Add(new ClsComboItem("zh", "简体中文"));
    
    cbmTest.DataSource = items;
    cbmTest.ValueMember = "Value";
    cbmTest.DisplayMember = "Display";
}

之所以加了一个无参数的默认构造函数,是为了应对各种情况。


这代码还不是最优的,有时候绑定数据的时候,可能写错字段名称等等。那么可以加个静态方法:

class ClsComboItem
{
    public string Value { get; set; } //值字段
    public string Display{ get; set; }//显示字段
    
    //默认构造函数
    public ClsComboItem() { }
    
    //带参数构造函数
    public ClsComboItem(string value, string display)
    {
        this.Display = display;
        this.Value = value;
    }

    /// <summary>
    /// 绑定数据
    /// </summary>
    public static void BindControl(ComboBox cbm, List<ClsComboItem> items){
        cbm.DataSource = items;
        cbm.DisplayMember = "Display";
        cbm.ValueMember = "Value";
    }
}

只需要创建一个List列表,再调用该静态方法绑定数据即可:

private void LoadData(){
    List<ClsComboItem> items = new List<ClsComboItem>();
    items.Add(new ClsComboItem("en", "English"));
    items.Add(new ClsComboItem("zh", "简体中文"));
    
    ClsComboItem.BindControl(cboTest, items); //绑定数据
}

通过这种方法,就可以轻轻松松实现组合框绑定数据,显示的值和实际的值不同。

ps:这种方法不仅仅适用于组合框,列表框也可以。

上一篇:VSTO关闭文档再打开,不加载插件问题

下一篇:我的网站搭建(第32天) OAuth功能整合

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空

猜你喜欢

  • 猜测中,请稍等...