comboBox问题 在winform中,combobox 我想取到绑定的部门的ID,用ID作为查询条件,怎么取到呢?还有个问题,在form初始化的时候插入一个空数据,this.ccb_department.items.insert(0,"");这样写不对啊,在web中是可以的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 绑定的时候tag用id绑定,text用部门名绑定不就取得出来了。 public static void ComboBoxDataSource(ComboBox cmb, DataTable dt) { cmb.DataSource = dt; cmb.DisplayMember = "name"; cmb.ValueMember = "id"; cmb.SelectedIndex = 0; }用ID的话就SelectValue就行了!为什么要插入空数据呢?cmb.SelectedIndex =-1不就是默认为空吗 没怎么看明白,你不是在数据库中存储了然后去做对比吗???难道是已经些死了combox的内容,然后去又和数据库中比较呢 ?? 重写Combobox控件,继承原来的系统控件,如下代码是我重写的Combobox控件,你可以借鉴一下using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data;using System.Reflection;using System.Windows.Forms;namespace MyControl.Windows.Forms{ public class ComboBox : System.Windows.Forms.ComboBox,IDataValidate { public ArrayList codes = new ArrayList(); private System.ComponentModel.Container components = null; public ComboBox() { InitializeComponent(); this.DisplayMember = "Text"; this.ValueMember = "Value"; } protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Component Designer generated code private void InitializeComponent() { components = new System.ComponentModel.Container(); } #endregion #region 公共方法 public void AddItem(object value,string text) { this.Items.Add(new DataItem(value,text)); } public void Fill(DataTable dt,string valueField,string textField,bool hasEmpty) { this.Items.Clear(); if (hasEmpty) this.AddItem("",""); for (int i=0;i<dt.Rows.Count;i++) { this.AddItem(dt.Rows[i][valueField].ToString(),dt.Rows[i][textField].ToString()); } } public void Fill(DataTable dt,string valueField,string textField,string codeField,bool hasEmpty) { this.Items.Clear(); if (hasEmpty) { this.AddItem("",""); codes.Add(""); } for (int i=0;i<dt.Rows.Count;i++) { this.AddItem(dt.Rows[i][valueField].ToString(),dt.Rows[i][textField].ToString()); codes.Add(dt.Rows[i][codeField]); } } public void Fill(Type enumType,bool hasEmpty) { this.Items.Clear(); Array array = Enum.GetValues(enumType); if (hasEmpty) { this.AddItem("",""); } for (int i=0;i<array.Length ;i++) { this.AddItem((int)(array.GetValue(i)),Enum.GetName(enumType,array.GetValue(i))); } } public void Fill(Hashtable ht,bool hasEmpty) { this.Items.Clear(); if(hasEmpty) this.AddItem("",""); IDictionaryEnumerator iDictionaryEnumerator=ht.GetEnumerator(); /// modified by riven.huang 2007-1-25 start /// 由于Hashtable中的排序是无序的,为了显示的数据与数据库中一致,对key做排序操作 ArrayList akeys = new ArrayList(ht.Keys); //按字母顺序进行排序 akeys.Sort(); // 遍历加载Hashtable里面的key与value foreach(string skey in akeys) { this.AddItem(skey,ht[skey].ToString()); } // while(iDictionaryEnumerator.MoveNext())// this.AddItem(iDictionaryEnumerator.Key,iDictionaryEnumerator.Value.ToString()); /// modified by riven.huang 2007-1-25 end } //added by wang.xuou 2006-11-15 end /// <summary> /// 查找Code与给定值相同的节点的编号 /// </summary> /// <param name="value">需要搜索的节点Code</param> /// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns> public int FindCode(string value) { for(int i=0;i<codes.Count;i++) { if (codes[i].ToString() == value) return i; } return -1; } /// <summary> /// 查找Code与给定值相同的节点的编号 /// </summary> /// <param name="value">需要搜索的节点Code</param> /// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns> public string FindTextByValue(object value) { for(int i=0;i<this.Items.Count;i++) { if (((DataItem)this.Items[i]).Value.ToString() == value.ToString()) return ((DataItem)this.Items[i]).Text.ToString(); } return ""; } /// <summary> /// 将Code与给定值相同的节点设为当前选定节点,并返回节点编号 /// </summary> /// <param name="value">需要搜索的节点Code</param> /// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns> public int SetSelectedNodeByCode(string value) { for(int i=0;i<codes.Count;i++) { if (codes[i].ToString() == value) { this.SelectedIndex = i+1; return i+1; } } return -1; } #endregion #region 属性 public object Value { get { if (this.SelectedIndex>=0) { return ((DataItem)this.Items[this.SelectedIndex]).Value; } else { return null; } } set { if (value!=null) { this.SelectedIndex = 0; for(int i=0;i<this.Items.Count;i++) { if (((DataItem)this.Items[i]).Value.ToString().Equals(value.ToString())) { this.SelectedIndex = i; return; } } } } } /// <summary> /// 读取或设置控件对应的数据对象的属性名称。 /// </summary> private string m_dataMember = ""; [Description("读取或设置控件对应的数据对象的属性名称。"), Category("自定义")] public string DataMember { get { return m_dataMember; } set { m_dataMember = value; } } /// <summary> /// 读取或设置控件对应的数据源。 /// </summary> private string m_dataSource = ""; [Description("读取或设置控件对应的数据源。"), Category("自定义")] public new string DataSource { get { return m_dataSource; } set { m_dataSource = value; } } #endregion #region IDataValidate 成员 private bool m_allowEmpty = true; [Description("读取和设置是否可以为空。"),Category("自定义")] public bool AllowEmpty { get { return m_allowEmpty; } set { m_allowEmpty = value; } } private string m_parttern = ""; [Description("读取和设置输入值需要符合的正则表达式。"),Category("自定义")] public string Pattern { get { return m_parttern; } set { m_parttern = value; } } private string m_patternPromptString = ""; [Description("读取和设置当违反正则表达式时,显示的提示信息。"),Category("自定义")] public string PatternPromptString { get { return m_patternPromptString; } set { m_patternPromptString = value; } } private EnumValueType m_dataType = EnumValueType.String; [Description("数据类型。"),Category("自定义")] public EnumValueType DataType { get { return m_dataType; } set { m_dataType = value; } } [Description("输入字符的最大长度。"),Category("自定义")] public new int MaxLength { get { return base.MaxLength; } set { base.MaxLength = value; } } private int m_decimal = 0; [Description("数据值的小数位个数。"),Category("自定义")] public int Decimal { get { return m_decimal; } set { m_decimal = value; } } private string m_promptString = ""; [Description("读取和设置当输入值不符合所设定数据类型时显示的提示信息。"),Category("自定义")] public string PromptString { get { return m_promptString; } set { m_promptString = value; } } /// <summary> /// 文本框值。 /// </summary> [Description("读取和设置文本框值")] public new string Text { get { return base.Text.Trim(); } set { base.Text = value; } } [Description("读取和设置在读取设置值时是否要去除两边的空格。"),Category("自定义")] public bool IsTrim { get { return true; } set { } } public bool Validate() { if (!this.AllowEmpty && (this.Text.Trim() == "" || this.SelectedIndex == -1)) { MessageBox.Show("[" + this.PromptString + "]项是必填项,请输入。","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); this.Focus(); return false; } return true; } #endregion } #region 元素类 public class DataItem { public DataItem() { } public DataItem(object value,object text) { this.Value = value; this.Text = text; } private object _value = null; public object Value { get { return _value; } set { _value = value; } } private object _text = null; public object Text { get { return _text; } set { _text = value; } } } #endregion} 我感觉和web的用法不一样才这样问的 .Net 分析文章语句代码 C#计算器程序解释寻求 大家帮我看看这个[在我另一贴中取分] MYsql的select limit問題 为什么Assembly.Load(Path).CreateInstance(ClassName);的值为null? 公司要转到。NET上来,今天给我个任务要用。NET写 《读心术》很悬的测试,是不是和软件也有关呀? 关于系统可配置表(由用户添加并定义表结构的Table)如何用datagrid显示?高分请教!! C# 大整数运算,求大神! 这个问题太简单了?????? 麻烦帮我看一下啊~~Timer的问题~~~ 一个简易浏览器程序制作请教
{
cmb.DataSource = dt;
cmb.DisplayMember = "name";
cmb.ValueMember = "id";
cmb.SelectedIndex = 0;
}
用ID的话就SelectValue就行了!
为什么要插入空数据呢?
cmb.SelectedIndex =-1不就是默认为空吗
难道是已经些死了combox的内容,然后去又和数据库中比较呢 ??
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Reflection;
using System.Windows.Forms;namespace MyControl.Windows.Forms
{
public class ComboBox : System.Windows.Forms.ComboBox,IDataValidate
{
public ArrayList codes = new ArrayList(); private System.ComponentModel.Container components = null; public ComboBox()
{
InitializeComponent();
this.DisplayMember = "Text";
this.ValueMember = "Value";
} protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Component Designer generated code
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion #region 公共方法
public void AddItem(object value,string text)
{
this.Items.Add(new DataItem(value,text));
} public void Fill(DataTable dt,string valueField,string textField,bool hasEmpty)
{
this.Items.Clear(); if (hasEmpty) this.AddItem("",""); for (int i=0;i<dt.Rows.Count;i++)
{
this.AddItem(dt.Rows[i][valueField].ToString(),dt.Rows[i][textField].ToString());
}
} public void Fill(DataTable dt,string valueField,string textField,string codeField,bool hasEmpty)
{
this.Items.Clear(); if (hasEmpty)
{
this.AddItem("","");
codes.Add("");
} for (int i=0;i<dt.Rows.Count;i++)
{
this.AddItem(dt.Rows[i][valueField].ToString(),dt.Rows[i][textField].ToString());
codes.Add(dt.Rows[i][codeField]);
}
}
public void Fill(Type enumType,bool hasEmpty)
{
this.Items.Clear(); Array array = Enum.GetValues(enumType);
if (hasEmpty)
{
this.AddItem("","");
} for (int i=0;i<array.Length ;i++)
{
this.AddItem((int)(array.GetValue(i)),Enum.GetName(enumType,array.GetValue(i)));
}
} public void Fill(Hashtable ht,bool hasEmpty)
{
this.Items.Clear(); if(hasEmpty)
this.AddItem("",""); IDictionaryEnumerator iDictionaryEnumerator=ht.GetEnumerator(); /// modified by riven.huang 2007-1-25 start
/// 由于Hashtable中的排序是无序的,为了显示的数据与数据库中一致,对key做排序操作
ArrayList akeys = new ArrayList(ht.Keys); //按字母顺序进行排序
akeys.Sort(); // 遍历加载Hashtable里面的key与value
foreach(string skey in akeys)
{
this.AddItem(skey,ht[skey].ToString());
} // while(iDictionaryEnumerator.MoveNext())
// this.AddItem(iDictionaryEnumerator.Key,iDictionaryEnumerator.Value.ToString()); /// modified by riven.huang 2007-1-25 end
}
//added by wang.xuou 2006-11-15 end
/// <summary>
/// 查找Code与给定值相同的节点的编号
/// </summary>
/// <param name="value">需要搜索的节点Code</param>
/// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns>
public int FindCode(string value)
{
for(int i=0;i<codes.Count;i++)
{
if (codes[i].ToString() == value) return i;
} return -1;
} /// <summary>
/// 查找Code与给定值相同的节点的编号
/// </summary>
/// <param name="value">需要搜索的节点Code</param>
/// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns>
public string FindTextByValue(object value)
{
for(int i=0;i<this.Items.Count;i++)
{
if (((DataItem)this.Items[i]).Value.ToString() == value.ToString())
return ((DataItem)this.Items[i]).Text.ToString();
} return "";
}
/// <summary>
/// 将Code与给定值相同的节点设为当前选定节点,并返回节点编号
/// </summary>
/// <param name="value">需要搜索的节点Code</param>
/// <returns>若找到相同的Code,则返回节点所在序号;否则返回-1</returns>
public int SetSelectedNodeByCode(string value)
{
for(int i=0;i<codes.Count;i++)
{
if (codes[i].ToString() == value)
{
this.SelectedIndex = i+1;
return i+1;
}
} return -1;
}
#endregion #region 属性
public object Value
{
get
{
if (this.SelectedIndex>=0)
{
return ((DataItem)this.Items[this.SelectedIndex]).Value;
}
else
{
return null;
}
}
set
{
if (value!=null)
{
this.SelectedIndex = 0;
for(int i=0;i<this.Items.Count;i++)
{
if (((DataItem)this.Items[i]).Value.ToString().Equals(value.ToString()))
{
this.SelectedIndex = i;
return;
}
}
}
}
}
/// <summary>
/// 读取或设置控件对应的数据对象的属性名称。
/// </summary>
private string m_dataMember = "";
[Description("读取或设置控件对应的数据对象的属性名称。"),
Category("自定义")]
public string DataMember
{
get
{
return m_dataMember;
}
set
{
m_dataMember = value;
}
} /// <summary>
/// 读取或设置控件对应的数据源。
/// </summary>
private string m_dataSource = "";
[Description("读取或设置控件对应的数据源。"),
Category("自定义")]
public new string DataSource
{
get
{
return m_dataSource;
}
set
{
m_dataSource = value;
}
}
#endregion #region IDataValidate 成员 private bool m_allowEmpty = true;
[Description("读取和设置是否可以为空。"),Category("自定义")]
public bool AllowEmpty
{
get
{
return m_allowEmpty;
}
set
{
m_allowEmpty = value;
}
} private string m_parttern = "";
[Description("读取和设置输入值需要符合的正则表达式。"),Category("自定义")]
public string Pattern
{
get
{
return m_parttern;
}
set
{
m_parttern = value;
}
} private string m_patternPromptString = "";
[Description("读取和设置当违反正则表达式时,显示的提示信息。"),Category("自定义")]
public string PatternPromptString
{
get
{
return m_patternPromptString;
}
set
{
m_patternPromptString = value;
}
} private EnumValueType m_dataType = EnumValueType.String;
[Description("数据类型。"),Category("自定义")]
public EnumValueType DataType
{
get
{
return m_dataType;
}
set
{
m_dataType = value;
}
} [Description("输入字符的最大长度。"),Category("自定义")]
public new int MaxLength
{
get
{
return base.MaxLength;
}
set
{
base.MaxLength = value;
}
} private int m_decimal = 0;
[Description("数据值的小数位个数。"),Category("自定义")]
public int Decimal
{
get
{
return m_decimal;
}
set
{
m_decimal = value;
}
} private string m_promptString = "";
[Description("读取和设置当输入值不符合所设定数据类型时显示的提示信息。"),Category("自定义")]
public string PromptString
{
get
{
return m_promptString;
}
set
{
m_promptString = value;
}
} /// <summary>
/// 文本框值。
/// </summary>
[Description("读取和设置文本框值")]
public new string Text
{
get
{
return base.Text.Trim();
}
set
{
base.Text = value;
}
} [Description("读取和设置在读取设置值时是否要去除两边的空格。"),Category("自定义")]
public bool IsTrim
{
get
{
return true;
}
set
{
}
} public bool Validate()
{
if (!this.AllowEmpty && (this.Text.Trim() == "" || this.SelectedIndex == -1))
{
MessageBox.Show("[" + this.PromptString + "]项是必填项,请输入。","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
this.Focus();
return false;
} return true;
} #endregion
} #region 元素类
public class DataItem
{
public DataItem()
{
} public DataItem(object value,object text)
{
this.Value = value;
this.Text = text;
} private object _value = null;
public object Value
{
get
{
return _value;
}
set
{
_value = value;
}
} private object _text = null;
public object Text
{
get
{
return _text;
}
set
{
_text = value;
}
}
}
#endregion
}