none
Combobox控件怎么实现这样的功能? RRS feed

  • 问题

  • 有一个Combobox控件,所有的值要从数据库中读取绑定!
    例如:表一:
    ID,名称
    1,名称1
    2,名称2
    3,名称3
    4,名称4

    下拉列表要实现这样的功能:
    默认为“请选择”,他的值为0
    然后列出这个表中的所有数据,显示的是名称,值为ID
    也就是选择了“名称1”,他的value就是1,依次……

    我给Combobox绑定了数据:
    Combobox.DataSource = ds.Tables[0];
    Combobox.DisplayMember = "名称";
    Combobox.ValueMember = "ID";
    但是没法再往Combobox中的items中插入了.
    可是如果用循环Add的方法,又不知道怎么让他显示“名称”,值为“ID”,怎么做呢?

    高手指教!谢谢!
    2009年6月28日 10:59

答案

  • public class USState
        {
            private string my名称 ;
            private string myID ;
       
            public  USState(string str名称, string strID)
            {

                this.my名称 = str名称;
                this.myID = strID;
            }

            public string 名称 
            {
                get
                {
                    return my名称;
                }
            }

            public string ID
            {
           
                get
                {
                    return myID;
                }
            }


    }



    ArrayList USStates = new ArrayList()    ;
                USStates.Add(new USState("请选择", "0"));
    foreach(datarow dr in ds.Tables[0])
    {
      USStates.Add(new USState(dr["名称"].Tostring(), dr["ID"].Tostring()));
    }
    Combobox.DataSource =USStates;
    Combobox.DisplayMember = "名称";
    Combobox.ValueMember = "ID";


    http://feiyun0112.cnblogs.com/
    2009年6月28日 11:31
    版主
  •             string strConnection ="Data Source=70297E7090BF4AF;Initial Catalog=stu;Integrated Security=True";

                SqlConnection objConnection = new SqlConnection(strConnection);
                string select = "select * from tb";
                objConnection.Open();

                DataSet ds = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter(select,objConnection);
              
                adapter.Fill(ds, "tb");
                comboBox1.DataSource = ds.Tables[0];

                this.comboBox1.DisplayMember = "名称";
                this.comboBox1.ValueMember = "ID";

                objConnection.Close();

    不知道对不对,我亲自做了一下,还请指正


    ♡. Microsoft .NET Platform
    2009年6月28日 11:34

全部回复

  • 定义一个类,类有property "名称"; "ID";

    将数据填入List<类>,给Combobox绑定


    http://feiyun0112.cnblogs.com/
    2009年6月28日 11:18
    版主
  • 能有详细点的代码吗?谢谢!
    2009年6月28日 11:20
  • public class USState
        {
            private string my名称 ;
            private string myID ;
       
            public  USState(string str名称, string strID)
            {

                this.my名称 = str名称;
                this.myID = strID;
            }

            public string 名称 
            {
                get
                {
                    return my名称;
                }
            }

            public string ID
            {
           
                get
                {
                    return myID;
                }
            }


    }



    ArrayList USStates = new ArrayList()    ;
                USStates.Add(new USState("请选择", "0"));
    foreach(datarow dr in ds.Tables[0])
    {
      USStates.Add(new USState(dr["名称"].Tostring(), dr["ID"].Tostring()));
    }
    Combobox.DataSource =USStates;
    Combobox.DisplayMember = "名称";
    Combobox.ValueMember = "ID";


    http://feiyun0112.cnblogs.com/
    2009年6月28日 11:31
    版主
  •             string strConnection ="Data Source=70297E7090BF4AF;Initial Catalog=stu;Integrated Security=True";

                SqlConnection objConnection = new SqlConnection(strConnection);
                string select = "select * from tb";
                objConnection.Open();

                DataSet ds = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter(select,objConnection);
              
                adapter.Fill(ds, "tb");
                comboBox1.DataSource = ds.Tables[0];

                this.comboBox1.DisplayMember = "名称";
                this.comboBox1.ValueMember = "ID";

                objConnection.Close();

    不知道对不对,我亲自做了一下,还请指正


    ♡. Microsoft .NET Platform
    2009年6月28日 11:34
  • 你好!
         我感觉直接使用数据绑定就可以了,如果要新添加项的话,直接在数据库里或DataSet里添加行就可以了!
    周雪峰
    2009年6月28日 14:50
    版主
  • feiyun0112 说的方法是可行的
    你也可以用周雪峰说的方法
    操作
    ds.Tables[0],对这个table中的记录进行增删改,只是这样的操作相对较复杂,而且对于无法应对字段发生变化的需求
    莫让青春付流水
    2009年6月28日 15:36
  • 看起来你在使用Windows表单类库。建议使用BindingSource绑定到一个实现了IBindingList的集合,比如BindingList<T>。
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年6月29日 16:17
    版主