我们在开发的过程中经常要用到comboBox控件,而且通常要绑定数据。用.net自带的控件绑定起来有点麻烦。而且操作起来不方便。所以重写了一下。希望对大家有点用。献丑了!
以前我们绑定comboBox数据:
private void LoadTaster()
{
try
{
Cursor.Current = ApplicationLog.AppCursor;
cboTaster.Items.Clear();
cboTaster.Items.Add("<无>");
DataSet userDS = SystemManageBF.GetTaster();
DataView dvTree = new DataView(userDS.Tables[0]);
foreach (DataRowView Row in dvTree)
{
cboTaster.Items.Add(Row["NAME"].ToString());
}
if (cboTaster.Items.Count > 0)
cboTaster.SelectedIndex = 0;
Cursor.Current = Cursors.Default;
}
catch (Exception ex)
{
Cursor.Current = Cursors.Default;
MessageBox.Show(ex.Message, "加载审批人员错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
}
{
try
{
Cursor.Current = ApplicationLog.AppCursor;
cboTaster.Items.Clear();
cboTaster.Items.Add("<无>");
DataSet userDS = SystemManageBF.GetTaster();
DataView dvTree = new DataView(userDS.Tables[0]);
foreach (DataRowView Row in dvTree)
{
cboTaster.Items.Add(Row["NAME"].ToString());
}
if (cboTaster.Items.Count > 0)
cboTaster.SelectedIndex = 0;
Cursor.Current = Cursors.Default;
}
catch (Exception ex)
{
Cursor.Current = Cursors.Default;
MessageBox.Show(ex.Message, "加载审批人员错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
}
重写后的comboBox代码:
Code
/**//**************************************************************
*
* Author:Huzy
* CopyRight:Huzy Studio
* WebSite:WWW.DTVCMS.COM
* ControlName:HuzyComboBox
* Date:2008-06-17 13:00:02
*
***************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.ComponentModel;
using System.Collections;
using System.Reflection;
namespace Huzy.Controls
{
/**//// <summary>
/// 专门用于填充ComboBox信息方法--Coding By Huzy
/// </summary>
public class HuzyComboBox : ComboBox
{
private DataSet _dataSet = null;
/**//// <summary>
/// 设置数据源
/// </summary>
public DataSet DataSet
{
set { _dataSet = value; }
}
private string _keyName;
/**//// <summary>
/// 设置加载数据第一列名称,默认为第一列索引
/// </summary>
public string KeyName
{
set { _keyName = value; }
get { return _keyName; }
}
private string _keyValue;
/**//// <summary>
/// 设置加载数据第二列名称,默认为第二列索引
/// </summary>
public string KeyValue
{
set { _keyValue = value;}
get { return _keyValue; }
}
/**//// <summary>
/// 获取或设置 HuzyComboBox 中当前选定的项
/// </summary>
public ComboBoxItem SelectedComboBoxItem
{
get
{
int num1 = this.SelectedIndex;
if (num1 != -1)
{
return this.ItemsCollection[num1];
}
return null;
}
}
private ItemsCollection _itemsCollection;
/**//// <summary>
/// 取得项目集合
/// </summary>
//[Browsable(false)]
public ItemsCollection ItemsCollection
{
get
{
if (_itemsCollection == null)
_itemsCollection = new ItemsCollection(this);
return _itemsCollection;
}
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
public void DataBindings()
{
Binding();
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
/// <param name="dataSet">设置数据源</param>
public void DataBindings(DataSet dataSet)
{
this._dataSet = dataSet;
Binding();
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
/// <param name="dataSet">数据集</param>
/// <param name="columnNameOne">键名称</param>
/// <param name="columnNameTwo">键值</param>
public void DataBindings(DataSet dataSet, string keyName, string keyValue)
{
this._dataSet = dataSet;
this._keyName = keyName;
this._keyValue = keyValue;
Binding();
}
/**//// <summary>
/// 绑定数据项
/// </summary>
private void Binding()
{
if (_dataSet == null)
return;
if (_dataSet.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in _dataSet.Tables[0].Rows)
{
object row1 = null;
object row2 = null;
if (string.IsNullOrEmpty(_keyName))
row1 = row[0];
else
row1 = row[_keyName];
if (string.IsNullOrEmpty(_keyValue))
row2 = row[1];
else
row2 = row[_keyValue];
ItemsCollection.Add(row1, row2);
}
}
}
}
/**//// <summary>
/// 代表 ItemsCollection 中项的集合
/// </summary>
public class ItemsCollection : List<ComboBoxItem>
{
private ComboBox owner;
/**//// <summary>
/// 初始化ItemsCollection的新实例
/// </summary>
/// <param name="owner">拥有该对象集合的 System.Windows.Forms.ComboBox</param>
public ItemsCollection(ComboBox owner)
{
this.owner = owner;
}
public ItemsCollection()
{
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象
/// </summary>
/// <param name="ComboBoxItem">ComboBoxItem对象</param>
public new void Add(ComboBoxItem _comboBoxItem)
{
this.owner.Items.Add(_comboBoxItem.Item);
base.Add(_comboBoxItem);
}
/**//// <summary>
/// 向任务集中增加一个HuzyComboBox对象
/// </summary>
/// <param name="key">键</param>
/// <param name="item">值</param>
public void Add(object key, object item)
{
ComboBoxItem comboBoxItem = new ComboBoxItem(key, item);
this.owner.Items.Add(item);
base.Add(comboBoxItem);
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象数组
/// </summary>
/// <param name="ComboBoxItem">ComboBoxItem对象数组</param>
public void AddRange(ComboBoxItem[] _comboBoxItem)
{
if (_comboBoxItem == null)
return;
if (_comboBoxItem.Length <= 0)
return;
for (int i = 0; i < _comboBoxItem.Length; i++)
{
this.owner.Items.Add(_comboBoxItem[i].Item);
base.Add(_comboBoxItem[i]);
}
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象数组
/// </summary>
/// <param name="key">键数组</param>
/// <param name="item">值数组</param>
public void AddRange(object[] _key, object[] item)
{
if (_key == null || item==null)
return;
if (_key.Length <= 0 || item.Length <= 0)
return;
if (_key.Length!=item.Length)
return;
for (int i = 0; i < _key.Length; i++)
{
this.owner.Items.Add(item[i]);
base.Add(( new ComboBoxItem(_key[i],item[i])));
}
}
/**//// <summary>
/// 从 HuzyComboBox 中移除所有项
/// </summary>
public new void Clear()
{
this.owner.Items.Clear();
base.Clear();
}
/**//// <summary>
/// 检索指定的项在集合中的索引
/// </summary>
/// <param name="value">一个对象,它表示要在集合中查找的项</param>
/// <returns>项在集合内从零开始的索引;否则为 -1</returns>
public new int IndexOf(ComboBoxItem value)
{
if (value == null)
return -1;
return base.IndexOf(value);
}
/**//// <summary>
/// 移除 HuzyComboBox 中指定索引处的项
/// </summary>
/// <param name="value">要移除的项的索引</param>
public new void RemoveAt(int index)
{
if (this.owner == null)
return;
if (this.owner.Items.Count <= 0)
return;
if ((index < 0) || (index >= this.Count))
return;
this.owner.Items.RemoveAt(index);
base.RemoveAt(index);
}
/**//// <summary>
/// 从 ItemsCollection 中移除指定的项
/// </summary>
/// <param name="index">要从列表移除的 ComboBoxItem</param>
public new void Remove(ComboBoxItem value)
{
int index = this.IndexOf(value);
if (index != -1)
{
base.RemoveAt(index);
}
}
public new ComboBoxItem this[int index]
{
set { base[index] = value; }
get { return base[index]; }
}
}
/**//// <summary>
/// ComboBoxItem属性
/// </summary>
[Serializable()]
public class ComboBoxItem
{
private object _key;
/**//// <summary>
/// 键
/// </summary>
public object Key
{
set { _key = value; }
get { return _key; }
}
private object _item;
/**//// <summary>
/// 值
/// </summary>
public object Item
{
set { _item = value; }
get { return _item; }
}
/**//// <summary>
/// ComboBoxItem属性构造函数
/// </summary>
/// <param name="key">键</param>
/// <param name="item">值</param>
public ComboBoxItem(object key, object item)
{
this._key = key;
this._item = item;
}
public ComboBoxItem()
{
}
}
}
/**//**************************************************************
*
* Author:Huzy
* CopyRight:Huzy Studio
* WebSite:WWW.DTVCMS.COM
* ControlName:HuzyComboBox
* Date:2008-06-17 13:00:02
*
***************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.ComponentModel;
using System.Collections;
using System.Reflection;
namespace Huzy.Controls
{
/**//// <summary>
/// 专门用于填充ComboBox信息方法--Coding By Huzy
/// </summary>
public class HuzyComboBox : ComboBox
{
private DataSet _dataSet = null;
/**//// <summary>
/// 设置数据源
/// </summary>
public DataSet DataSet
{
set { _dataSet = value; }
}
private string _keyName;
/**//// <summary>
/// 设置加载数据第一列名称,默认为第一列索引
/// </summary>
public string KeyName
{
set { _keyName = value; }
get { return _keyName; }
}
private string _keyValue;
/**//// <summary>
/// 设置加载数据第二列名称,默认为第二列索引
/// </summary>
public string KeyValue
{
set { _keyValue = value;}
get { return _keyValue; }
}
/**//// <summary>
/// 获取或设置 HuzyComboBox 中当前选定的项
/// </summary>
public ComboBoxItem SelectedComboBoxItem
{
get
{
int num1 = this.SelectedIndex;
if (num1 != -1)
{
return this.ItemsCollection[num1];
}
return null;
}
}
private ItemsCollection _itemsCollection;
/**//// <summary>
/// 取得项目集合
/// </summary>
//[Browsable(false)]
public ItemsCollection ItemsCollection
{
get
{
if (_itemsCollection == null)
_itemsCollection = new ItemsCollection(this);
return _itemsCollection;
}
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
public void DataBindings()
{
Binding();
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
/// <param name="dataSet">设置数据源</param>
public void DataBindings(DataSet dataSet)
{
this._dataSet = dataSet;
Binding();
}
/**//// <summary>
/// 执行加载ComboBox信息方法
/// </summary>
/// <param name="dataSet">数据集</param>
/// <param name="columnNameOne">键名称</param>
/// <param name="columnNameTwo">键值</param>
public void DataBindings(DataSet dataSet, string keyName, string keyValue)
{
this._dataSet = dataSet;
this._keyName = keyName;
this._keyValue = keyValue;
Binding();
}
/**//// <summary>
/// 绑定数据项
/// </summary>
private void Binding()
{
if (_dataSet == null)
return;
if (_dataSet.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in _dataSet.Tables[0].Rows)
{
object row1 = null;
object row2 = null;
if (string.IsNullOrEmpty(_keyName))
row1 = row[0];
else
row1 = row[_keyName];
if (string.IsNullOrEmpty(_keyValue))
row2 = row[1];
else
row2 = row[_keyValue];
ItemsCollection.Add(row1, row2);
}
}
}
}
/**//// <summary>
/// 代表 ItemsCollection 中项的集合
/// </summary>
public class ItemsCollection : List<ComboBoxItem>
{
private ComboBox owner;
/**//// <summary>
/// 初始化ItemsCollection的新实例
/// </summary>
/// <param name="owner">拥有该对象集合的 System.Windows.Forms.ComboBox</param>
public ItemsCollection(ComboBox owner)
{
this.owner = owner;
}
public ItemsCollection()
{
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象
/// </summary>
/// <param name="ComboBoxItem">ComboBoxItem对象</param>
public new void Add(ComboBoxItem _comboBoxItem)
{
this.owner.Items.Add(_comboBoxItem.Item);
base.Add(_comboBoxItem);
}
/**//// <summary>
/// 向任务集中增加一个HuzyComboBox对象
/// </summary>
/// <param name="key">键</param>
/// <param name="item">值</param>
public void Add(object key, object item)
{
ComboBoxItem comboBoxItem = new ComboBoxItem(key, item);
this.owner.Items.Add(item);
base.Add(comboBoxItem);
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象数组
/// </summary>
/// <param name="ComboBoxItem">ComboBoxItem对象数组</param>
public void AddRange(ComboBoxItem[] _comboBoxItem)
{
if (_comboBoxItem == null)
return;
if (_comboBoxItem.Length <= 0)
return;
for (int i = 0; i < _comboBoxItem.Length; i++)
{
this.owner.Items.Add(_comboBoxItem[i].Item);
base.Add(_comboBoxItem[i]);
}
}
/**//// <summary>
/// 向任务集中增加一个ComboBoxItem对象数组
/// </summary>
/// <param name="key">键数组</param>
/// <param name="item">值数组</param>
public void AddRange(object[] _key, object[] item)
{
if (_key == null || item==null)
return;
if (_key.Length <= 0 || item.Length <= 0)
return;
if (_key.Length!=item.Length)
return;
for (int i = 0; i < _key.Length; i++)
{
this.owner.Items.Add(item[i]);
base.Add(( new ComboBoxItem(_key[i],item[i])));
}
}
/**//// <summary>
/// 从 HuzyComboBox 中移除所有项
/// </summary>
public new void Clear()
{
this.owner.Items.Clear();
base.Clear();
}
/**//// <summary>
/// 检索指定的项在集合中的索引
/// </summary>
/// <param name="value">一个对象,它表示要在集合中查找的项</param>
/// <returns>项在集合内从零开始的索引;否则为 -1</returns>
public new int IndexOf(ComboBoxItem value)
{
if (value == null)
return -1;
return base.IndexOf(value);
}
/**//// <summary>
/// 移除 HuzyComboBox 中指定索引处的项
/// </summary>
/// <param name="value">要移除的项的索引</param>
public new void RemoveAt(int index)
{
if (this.owner == null)
return;
if (this.owner.Items.Count <= 0)
return;
if ((index < 0) || (index >= this.Count))
return;
this.owner.Items.RemoveAt(index);
base.RemoveAt(index);
}
/**//// <summary>
/// 从 ItemsCollection 中移除指定的项
/// </summary>
/// <param name="index">要从列表移除的 ComboBoxItem</param>
public new void Remove(ComboBoxItem value)
{
int index = this.IndexOf(value);
if (index != -1)
{
base.RemoveAt(index);
}
}
public new ComboBoxItem this[int index]
{
set { base[index] = value; }
get { return base[index]; }
}
}
/**//// <summary>
/// ComboBoxItem属性
/// </summary>
[Serializable()]
public class ComboBoxItem
{
private object _key;
/**//// <summary>
/// 键
/// </summary>
public object Key
{
set { _key = value; }
get { return _key; }
}
private object _item;
/**//// <summary>
/// 值
/// </summary>
public object Item
{
set { _item = value; }
get { return _item; }
}
/**//// <summary>
/// ComboBoxItem属性构造函数
/// </summary>
/// <param name="key">键</param>
/// <param name="item">值</param>
public ComboBoxItem(object key, object item)
{
this._key = key;
this._item = item;
}
public ComboBoxItem()
{
}
}
}
重写后对数据绑定:
Code
cboPayUser.DataBindings(SystemManageBF.GetChildAreaAllPayUserByAreaID(ApplicationLog.AccessAreaID),"User_ID","User_Name");
if (cboPayUser.ItemsCollection.Count > 0)
cboPayUser.SelectedIndex = 0;
cboPolicy.DataSet = SaleManageBF.GetValidPolicy(ApplicationLog.QuerySelectedCustom.CUSTOM_CLASS, ApplicationLog.QuerySelectedCustom.GROUP_ID, ApplicationLog.QuerySelectedCustom.CUSTOM_ATTR == "0" ? "" : ApplicationLog.QuerySelectedCustom.CUSTOM_ATTR, ApplicationLog.GetLoginUser().USER_ID);
cboPolicy.KeyName = "策略编号";
cboPolicy.KeyValue = "策略名称";
cboPolicy.DataBindings();
if (cboPolicy.ItemsCollection.Count > 0)
cboPolicy.SelectedIndex = 0;
cboPayType.ItemsCollection.Add("X", "现金");
cboPayType.ItemsCollection.Add("D", "银行代收费");
cboPayType.ItemsCollection.Add("S", "银行刷卡");
if (cboPayType.ItemsCollection.Count > 0)
cboPayType.SelectedIndex =1;
cboPayUser.DataBindings(SystemManageBF.GetChildAreaAllPayUserByAreaID(ApplicationLog.AccessAreaID),"User_ID","User_Name");
if (cboPayUser.ItemsCollection.Count > 0)
cboPayUser.SelectedIndex = 0;
cboPolicy.DataSet = SaleManageBF.GetValidPolicy(ApplicationLog.QuerySelectedCustom.CUSTOM_CLASS, ApplicationLog.QuerySelectedCustom.GROUP_ID, ApplicationLog.QuerySelectedCustom.CUSTOM_ATTR == "0" ? "" : ApplicationLog.QuerySelectedCustom.CUSTOM_ATTR, ApplicationLog.GetLoginUser().USER_ID);
cboPolicy.KeyName = "策略编号";
cboPolicy.KeyValue = "策略名称";
cboPolicy.DataBindings();
if (cboPolicy.ItemsCollection.Count > 0)
cboPolicy.SelectedIndex = 0;
cboPayType.ItemsCollection.Add("X", "现金");
cboPayType.ItemsCollection.Add("D", "银行代收费");
cboPayType.ItemsCollection.Add("S", "银行刷卡");
if (cboPayType.ItemsCollection.Count > 0)
cboPayType.SelectedIndex =1;
MessageBox.Show(string.Format("键:{0}\r\n值:{1}",cboPayUser.SelectedComboBoxItem.Key.ToString(),cboPayUser.SelectedComboBoxItem.Item.ToString()));
源代码:下载
希望大家能点给意见!!