博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinForm 中ComboBox 绑定总结
阅读量:5242 次
发布时间:2019-06-14

本文共 3873 字,大约阅读时间需要 12 分钟。

http://www.cnblogs.com/blsong/archive/2010/04/13/1710955.html

1.  DataTable

用DataTable直接绑定,只需 要设置DataSource、DisplayMember、ValueMember三个属性即可。

this.cmbConsumeSuperMarket.DataSource = dtSuperMarket;
this.cmbConsumeSuperMarket.DisplayMember = "Name"; this.cmbConsumeSuperMarket.ValueMember = "ID"; this.cmbConsumeSuperMarket.SelectedIndex = 0;
在使用时使用如下方式,即可取得相应 的ID和Name,这样就可以基本满足业务要求了。

StringTools.ObjectToInt(this.cmbConsumeSuperMarket.SelectedValue);

StringTools.ObjectToStr(this.cmbConsumeSuperMarket.SelectedText);
但如上的问题是,因为ComboBox绑定后默认显示第一项,但需要一项提示性选项,我没有找到什么好方法实现了。

上网看一些人用ComboBox.SelectedIndex = -1或设置ComboBox.Text或初始化设置ComboBox.Items一个项为初始项或设置ComboBox.DropDownStyle,但 我这里都没达到效果。

本应实现效果A,但以上只能实现B效果,所以以上不符合要求。

效果A     效果B

 

2.  ComboBox.Items.Add

一开始使用时,以为像Asp.net那样有ListItem属性可以使用,但Items只有几个特别简单的属性,还好Add(object item),所以就只能在object这里作文章了。

 所以就把要绑定的item新new 了一个对象,再重写ToString(),如是乎就可以了。

因为在整个页面中,有很多类似的ComboBox控件,所以就小小的抽象了一下,然后就可以便捷的实现效果B了。具体实现方式如下:

using System.Data;
using System.Windows.Forms;

namespace BlackCore.App.Method

{
    //抽象类 DataBindControls 引入抽象方法 dataBindComboBox(……)
    public abstract class DataBindControls
    {
        /// 

        /// 绑定 ComboBox

        /// 
        /// ComboBox Control
        /// 是否为此控件插入一个默认选项且默认选中
        /// 需要绑定的DataTable
        /// 显示文字(DisplayMember)
        /// ValueMember
        public abstract void dataBindComboBox(ComboBox cmb, bool isInsertDefaultItem, DataTable dt, string selectedText, string selectedValue);
    }
}
实现抽象即可 

using System.Data;
using System.Windows.Forms;
using BlackCore.FinancialLibrary;

namespace BlackCore.App.Method

{
    //实现抽象
    //类 DataBindControlsImplement 重 写 dataBindComboBox,并提供一个具体实现。
    //由 于 DataBindControlsImplement 中没有了抽象成员,因此可以(但并非必须) 将 DataBindControlsImplement 声明为非抽象类。
    public class DataBindControlsImplement : DataBindControls
    {        
        public override void dataBindComboBox(ComboBox comboBox, bool isInsertDefaultItem, DataTable dataTable, string selectedText, string selectedValue)
        {
            if (dataTable != null && dataTable.Rows != null && dataTable.Rows.Count > 0)
            {
                if (comboBox.Items.Count > 0)
                {
                    comboBox.Items.Clear();
                }
                int i = 1;
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    //comboBox.SelectedText = StringTools.ObjectToStr(dataRow[selectedText]).Trim ();
                    //comboBox.SelectedValue = StringTools.ObjectToInt(dataRow[selectedValue]).ToString ();

                    //BlackCore.BLL.FinancialManage.FMProject bllProject = new BlackCore.BLL.FinancialManage.FMProject();

                    //BlackCore.Model.FinancialManage.FMProject modelProject = new BlackCore.Model.FinancialManage.FMProject();
                    //modelProject = bllProject.GetModel(StringTools.ObjectToInt(dataRow["ID"]));

                    //用如下这种方式就只有selectedText,而没有selectedValue
                    //comboBox.Items.Add(StringTools.ObjectToStr(dataRow[selectedText]).Trim());

                    //可以存储在ComboBox中的任何种类的对象,而不是字符串。重写toString()方法生成的文本框将显示。

                    //这样就可以实现selectedText,selectedValue或更多需要的属性
                    comboBox.Items.Add(new ComboBoxItemTextValue(StringTools.ObjectToInt(dataRow[selectedValue]).ToString(), StringTools.ObjectToStr(dataRow[selectedText])));
                }
                if (isInsertDefaultItem)
                {
                    comboBox.Items.Insert(0, "请选择");
                }
                comboBox.SelectedIndex = 0;
            }            
        }

        public class ComboBoxItemTextValue

        {
            public string selectText;
            public string selectValue;            

            public ComboBoxItemTextValue(string _selectValue, string _selectText)

            {
                selectValue = _selectValue;
                selectText = _selectText;
            }
            public override string ToString()
            {
                return selectText;
            }
        }

    }

}
ComboBox的绑定

DataBindControlsImplement implement = new BlackCore.App.Method.DataBindControlsImplement();

implement.dataBindComboBox(this.searchCmbConsumeMarket, true, bllMarket.GetList("").Tables[0], "Name", "ID");

ComboBox的获取 

if (StringTools.ObjectToInt(searchCmbConsumeMarket.SelectedIndex) != 0)
{
    DataBindControlsImplement.ComboBoxItemTextValue comboItem = 
        (DataBindControlsImplement.ComboBoxItemTextValue)this.searchCmbConsumeProject.SelectedItem;
        string selectedText = comboItem.selectText;
        int selectedValue = comboItem.selectValue;
}

转载于:https://www.cnblogs.com/Echo529/p/6382195.html

你可能感兴趣的文章
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
BNU29140——Taiko taiko——————【概率题、规律题】
查看>>
POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】
查看>>
java 得到以后的日期
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
python安装easy_intall和pip
查看>>
HDU1004
查看>>
MySQL高速缓存
查看>>
DropdownList绑定的两种方法
查看>>
价值观
查看>>
数值计算中,浮点类型给我们挖的坑
查看>>
(String)、toString、String.valueOf
查看>>
mongodb命令----批量更改文档字段名
查看>>
python多线程下载网页图片并保存至特定目录
查看>>
了解循环队列的实现
查看>>
CentOS 简单命令
查看>>
Linux中修改docker镜像源及安装docker
查看>>