博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#自定义泛型类绑定ComboBox控件
阅读量:5273 次
发布时间:2019-06-14

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

 

ExpandedBlockStart.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'
),
"月"
)));
}

转载于:https://www.cnblogs.com/51net/p/3314392.html

你可能感兴趣的文章
GitHub 多人协作开发 三种方式:
查看>>
文本域添加编辑器
查看>>
Yum安装MySQL以及相关目录路径和修改目录
查看>>
java获取hostIp和hostName
查看>>
关于web服务器和数据库的各种说法(搜集到的)
查看>>
《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
Vue.js的从入门到放弃进击录(二)
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
Mesh属性[Unity]
查看>>
ajax与java后台交互
查看>>
面向对象之元类
查看>>
MySQL常用函数
查看>>
实现绘制图形的ToolBar
查看>>
C# 串口接收数据中serialPort.close()死锁
查看>>
Python3控制结构与函数
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>