在winform中,combobox 我想取到绑定的部门的ID,用ID作为查询条件,怎么取到呢?
还有个问题,在form初始化的时候插入一个空数据,this.ccb_department.items.insert(0,"");这样写不对啊,在web中是可以的

解决方案 »

  1.   

    绑定的时候tag用id绑定,text用部门名绑定不就取得出来了。
      

  2.   

     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不就是默认为空吗
      

  3.   

    没怎么看明白,你不是在数据库中存储了然后去做对比吗???
    难道是已经些死了combox的内容,然后去又和数据库中比较呢 ??
      

  4.   

    重写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
    }
      

  5.   

    我感觉和web的用法不一样才这样问的