WinForm 中ComboBox 绑定总结

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;
}

时间: 2024-12-29 11:53:27

WinForm 中ComboBox 绑定总结的相关文章

c#(winform)中ComboBox添加Key/Value项、获取选中项、根据Key

WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应用通常是键/值对的形式去绑定它的. 参考了一些网上的例子,最终写了一个辅助类用于方便对ComboBox的操作: 用下面这个类的实例作为ComboBox的添加项: using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace tp7309.

[WinForm]为ComboBox绑定数据源并提供下拉提示

关键代码: /// <summary> /// 为ComboBox绑定数据源并提供下拉提示 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="combox">ComboBox</param> /// <param name="list">数据源</param>

winform中comboBox控件加默认选项的问题

winform程序设计中,label,TextBox,ComboBox等几个控件几乎是用得最多的,在设计中经常会遇到一些小问题,如:comboBox控件绑定了数据源之后,如何设置默认值? combobox绑定数据源之后是这样的北京             <----默认显示的就是这条上海深圳....想要让它显示成这样请选择城市     <--------要想默认显示这条北京上海深圳 .... 尝试做法: 1.修改了DropDownStyle属性也不起作用. 2.消去数据源直接用  combob

WinForm 中 comboBox控件之数据绑定

下面介绍三种对comboBox绑定的方式,分别是泛型中List和Dictionary,还有数据集DataTable  一.List 现在我们直接创建一个List集合,然后绑定 1 List<string> liStr = new List<string>(); 2 liStr.Add("1"); 3 liStr.Add("2"); 4 liStr.Add("3"); 5 cboBindValue.DataSource =

winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)

上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的实现模糊查询,但是有一定的缺陷,就是,模糊查询只能从左往右. 上一篇连接地址:http://www.cnblogs.com/xilipu31/p/3993049.html 下面是简单的实现方式: 前台:一个简单的form窗体+ComboBox控件 后台:申明List<string> listOni

WPF中ComboBox绑定数据库自动读取产生数据

前台端 <ComboBox HorizontalAlignment="Left" Margin="410,113,0,0" VerticalAlignment="Top" Width="300"Name="cmb_SSBM" DisplayMemberPath="NAME" SelectedValuePath="CODE" SelectedIndex="

winform中的ListBox和ComboBox绑定数据用法实例

本文实例讲述了winform中的ListBox和ComboBox绑定数据用法.分享给大家供大家参考.具体实现方法如下: 本例实现将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容,代码如下: 代码如下: //- //自定义了Person类(有Name,Age,Heigth等属性) List<Person> persons=new List<Person>(); persons.Add(new Person("WuMiao",18,17

Winform ComboBox 绑定数据源 触发SelectedIndexChanged事件 处理办法

最近寫Winform程式,發現Winform中的ComboBox和Web中的Dropdown相差很大,在ComboBox 绑定数据源 會触发SelectedIndexChanged事件,很困擾,查找了資料,處理方法大體分為三種 1.添加一个标记位,在绑定前设置为false,绑定完成后设置回true(個人覺得用起來的很奇怪) void BindComboBox() { flag=false; ComboxBox1.ValueMember="ValueColumn"; ComboxBox1

Ext.net中Combobox如何绑定数据库中的值

今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID="ComBox_SecretsLevel" runat="server" FieldLabel="密级" Width="250" EmptyText="请选择密级..." > <Items> <ext:ListItem Text="