C#自定义泛型类绑定ComboBox控件

C# WinForm ComboBox 自定义数据项 (ComboBoxItem )

 

WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 

因为大家日常应用通常是键/值对的形式去绑定它的.

那么用键值对的形式如何做?

因为Combox的每一个项的值是一个object, 实际上就是一个键/值对.
我用的是下面这个类的实例作为它的一个项:

    /// <summary>
    /// ComboBox的项
    /// </summary>
    class ListItem : System.Object
    {
        private string m_sValue = string.Empty;
        private string m_sText = string.Empty;

        /// <summary>
        /// 值
        /// </summary>
        public string Value
        {
            get { return this.m_sValue; }
        }
        /// <summary>
        /// 显示的文本
        /// </summary>
        public string Text
        {
            get { return this.m_sText; }
        }

        public ListItem(string value, string text)
        {
            this.m_sValue = value;
            this.m_sText = text;
        }
        public override string ToString()
        {
            return this.m_sText;
        }
        public override bool Equals(System.Object obj)
        {
            if (this.GetType().Equals(obj.GetType()))
            {
                ListItem that = (ListItem)obj;
                return (this.m_sText.Equals(that.Value));
            }
            return false;
        }
        public override int GetHashCode()
        {
            return this.m_sValue.GetHashCode(); ;
        }

    }

 通过这个类就可以定义ComboBox的值了, 首先我们定义一个ListItem的清单作为ComboBox的数据源:

            List<ListItem> items = new List<ListItem>();
            items.Add(new ListItem("0", "Item_0_Text"));
            items.Add(new ListItem("1", "Item_1_Text"));
            items.Add(new ListItem("2", "Item_2_Text"));
            items.Add(new ListItem("3", "Item_3_Text"));
            items.Add(new ListItem("4", "Item_4_Text"));
            items.Add(new ListItem("5", "Item_5_Text"));
 

 然后进行相应的设置:

            //将数据源的属性与ComboBox的属性对应
            drpTest.DisplayMember = "Text";        //显示
            drpTest.ValueMember = "Value";        //值 

然后进就可以进行绑定了:

            drpTest.DataSource = items;        //绑定数据 

绑定数据之后, 就可以对其进行默认选择项的设置, 取值等操作:

            drpTest.SelectedValue = "4";        //设定选择项

            //取得当前选择的项
            ListItem selectedItem = (ListItem)drpTest.SelectedItem;
            string value = selectedItem.Value;    //值
            string text = selectedItem.Text;    //显示的文字

 

其他操作大家就依样画葫芦吧. 呵呵. 

View Code

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        public struct ComboBoxItem<TKey, TValue>
        {
            private TKey key;
            private TValue value;

            public ComboBoxItem(TKey key, TValue value)
            {
                this.key = key;
                this.value = value;
            }

            public TKey Key
            {
                get { return key; }
            }

            public TValue Value
            {
                get { return value; }
            }

            public override string ToString()
            {
                return Value.ToString();
            }
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            //KeyValuePair<int, string> keys = new KeyValuePair<int,string>();
            this.comboBox1.Items.Add(new ComboBoxItem<int, string>(1, "Lin"));
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var item = (ComboBoxItem<int, string>)this.comboBox1.SelectedItem;

            Text = item.Value;
        }
    }
}

  

一个 1月 到12 月的下拉单

for (int i = 1; i <= 12; i++)

{

    this.comboBox1.Items.Add(

       new ComboBoxItem<int, string>(i,

              String.Concat(i.ToString().PadLeft(2, '0'), "月")));

}

时间: 2024-10-01 16:41:11

C#自定义泛型类绑定ComboBox控件的相关文章

VS C# 怎样一次性给多个COMBOBOX控件添加ITEMS?

问题描述 VS C# 怎样一次性给多个COMBOBOX控件添加ITEMS? 就像在VB6.0中应用控件数组给相同的控件赋值一样,VS中应该怎样写? 解决方案 ComboBox[] cbs = new ComboBox[] { comboBox1, comboBox2, ... }; string[] items = { "a", "b", "c" }; foreach (var cb in cbs) { foreach (var item in

同时绑定编码和名称到ComboBox控件(WinForm)

combobox控件|编码 在使用ComboBox时,经常需要显示给用户名称,但接收用户信息时,却要接收用户选择的编码,以下方法实现将编码和名称同时绑定到ComboBox控件,随时可以取出用户选择的项目名称或是选择的项目编码. // 生成新的DataTable (也可以是从数据库中查询出的结果) DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); // 为Data

Visual C# 2005中让ComboBox控件显示出多个数据源属性

之前,我们在"如何使用简单绑定来显示多个数据源属性"一节中就曾经提到过,简单绑定并不直接支持数据源属性串连.同样,ComboBox控件也不直接支持数据源属性串连.也就是说,在默认状态下,ComboBox控件只能绑定至数据源的某单一属性,而不能绑定至属性串联后的结果.虽然不能直接做到,但是却可以间接做到,解决的方法就是利用ComboBox控件的Format属性来串联多个数据源属性. 程序范例1 图 3-44 图3-44所示的是程序范例CH3_DemoForm028.cs的执行画面,其中C

c# combobox控件的使用

POJO: class ComboBoxItem { string _text; string _value; public string Text { get { return _text; } set { _text = value; } } public string Value { get { return _value; } set { _value = value; } } public override String ToString() { return this.Value;

C#中comboBox控件的一些基本用法小结

private void InitCombo() { dt.Columns.Add("Text"); dt.Columns.Add("Value"); DataRow dr1 = dt.NewRow(); DataRow dr2 = dt.NewRow(); DataRow dr3 = dt.NewRow(); dr1["Text"] = "0-明细计划"; dr1["Value"] = "0&q

comboBox控件时间问题

问题描述 我有一个数据表ttx有3个字段,例如为:IDNAMEPATT1WWEE2RRYY.....我现在将数据表中的NAME字段绑定到了ComboBox控件,我想实现这样的功能,例如当ComboBox控件选择WW时,TextBox控件里的值为EE,当ComboBox控件选择RR时,TextBox控件里的值为YY,请问大家我用SelectedIndexChanged事件怎么实现不了. 解决方案 解决方案二:能实现写个存储过程createprocaa(@namevarchar(200),@pait

ComboBox控件输入文字后定位到那一条

问题描述 ComboBox控件我绑定了DataSource,现在想输入文字后,循环控件,只要碰到的第一个包含我输入的文字,就定位到那一条,如何实现,我输入文字,比如"法院",但是我拿ComboBox.Text,只能拿到"法"字,为什么啊,如何实现这个 解决方案 解决方案二: 解决方案三:http://bbs.csdn.net/topics/70420890

WinForm的窗体中怎么在DataGrid中放入ComboBox控件(50分)

问题描述 WinForm的窗体中怎么在DataGrid中放入ComboBox控件我的代码:DataGridTextBoxColumndgtb=(DataGridTextBoxColumn)DBG.TableStyles[0].GridColumnStyles[0];ComboBoxcbmDBG=newComboBox();cbmDBG.Items.AddRange(newobject[]{"选项一","选项二","选项三","选项四&q

ComboBox控件事件

问题描述 我有一个数据表ttx有3个字段,例如为:IDNAMEPATT1WWEE2RRYY.....我现在将数据表中的NAME字段绑定到了ComboBox控件,我想实现这样的功能,例如当ComboBox控件选择WW时,TextBox控件里的值为EE,当ComboBox控件选择RR时,TextBox控件里的值为YY,请问大家我用SelectedIndexChanged事件怎么实现不了. 解决方案 解决方案二:建议用SelectionChangeCommitted试试解决方案三:首先绑定ComBox