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

简介: C# WinForm ComboBox 自定义数据项 (ComboBoxItem )   WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应用通常是键/值对的形式去绑定它的.

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

 

img_405b18b4b6584ae338e0f6ecaf736533.gif
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' ), "月" )));
}
目录
相关文章
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
561 8
|
SQL 开发框架 .NET
C#一分钟浅谈:数据绑定与数据源控件
在Web开发中,数据绑定和数据源控件是实现动态网页的关键技术。本文从基础概念入手,详细讲解数据绑定的原理及其在ASP.NET中的应用,并介绍常见数据绑定方式:手动绑定和自动绑定。接着,文章重点介绍了ASP.NET中的数据源控件,如`SqlDataSource`、`ObjectDataSource`、`XmlDataSource`和`LinqDataSource`,并通过具体示例演示如何使用`SqlDataSource`和`GridView`进行数据绑定。最后,还列举了一些常见问题及其解决办法,帮助读者更好地理解和应用这些技术。
338 4
|
11月前
|
C#
C#-ListBox多选绑定
在WPF中,ListBox的SelectedItems属性为只读,无法直接绑定多选数据。本文通过定义一个附加属性实现双向绑定,利用依赖属性和事件监听同步选中项,从而解决该问题。
368 8
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
287 1
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
388 2
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
245 0
|
9月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
401 19
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
452 3
|
10月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
2223 0
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1508 12