none
关于combobox的属性问题 RRS feed

  • 问题

  • combobox 有一个显示的属性 text, 它到底有没有值属性啊?像value一样的那种

    DataTable 绑定到combobox的时候,发现一个是displaymember 还有一个是 ValueMember,请问,这个valuemember绑定后的值,我怎么取出来?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月28日 1:03

答案

  • 您好,请参考:

               创建一个DataTable,假设本例中的DataTable由两列,一列是"displayName" 用来显示选中的文本,一列是"valueName"用来显示被选中的项的值。

                DataRow row = this.dataTable1.NewRow();
                row["displayName"] = "Name1";
                row["valueName"] = "value1";
                this.dataTable1.Rows.Add(row);

                row = this.dataTable1.NewRow();
                row["displayName"] = "Name2";
                row["valueName"] = "value2";
                this.dataTable1.Rows.Add(row);
                //this.dataSet1.Tables.Add(this.dataTable1);

                this.comboBox1.DataSource = this.dataTable1;
                this.comboBox1.DisplayMember = "displayName";
                this.comboBox1.ValueMember = "valueName";

                //设置当前项
                this.comboBox1.SelectedValue = "value2";

                //获取选中的项
                MessageBox.Show(this.comboBox1.SelectedValue.ToString());

                //遍历所有项
                foreach (object item in comboBox1.Items)
                {
                    DataRowView dataRowView = item as DataRowView;
                    MessageBox.Show(dataRowView.Row["valueName"].ToString());
                }

             combobox只有Text属性,显示当前选中项的文本。

    2010年11月28日 2:16
    版主
  • 列“valueName”不属于表 。。。。。
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……


    您好

    假如您是参考Jyiuan 的范例,您的DataTable 必须有displayName 与valueName 栏位,

    假如您的DataTable 是透过 Select [display],[value] from [TableName] 取得,

    则改为

                this.comboBox1.DataSource = this.dataTable1;
                this.comboBox1.DisplayMember = "display";
                this.comboBox1.ValueMember = "value";

    http://www.dotblogs.com.tw/chou/archive/2009/03/20/7571.aspx

     


    歡迎參觀我的Blog.NET菜鳥自救會

    2010年11月28日 4:47
  • using System;
    using System.Windows.Forms ;
    using System.Drawing ;
    using System.Collections ;


    namespace MyListControlSample
    {

        public class USState
        {
            private string myShortName ;
            private string myLongName ;
       
            public  USState(string strLongName, string strShortName)
            {

                this.myShortName = strShortName;
                this.myLongName = strLongName;
            }

            public string ShortName
            {
                get
                {
                    return myShortName; } } public string LongName
            {
           
                get
                {
                    return myLongName ;
                }
            }

            public override string ToString()
            {
                return this.ShortName + " - " + this.LongName;
            }
        }

        public class ListBoxSample3:Form
        {
            private ListBox ListBox1 = new ListBox();
            private TextBox textBox1 = new TextBox() ;
           
            [STAThread]
            static void Main()
            {
                Application.Run(new ListBoxSample3()) ;
            }

            public ListBoxSample3()
            {
           
                this.ClientSize = new Size(292, 181) ;
                this.Text = "ListBox Sample3" ;

                ListBox1.Location = new Point(24, 16) ;
                ListBox1.Name = "ListBox1" ;
                ListBox1.Size = new Size(232, 130) ;
               


                textBox1.Location = new Point(24, 160) ;
                textBox1.Name = "textBox1" ;
                textBox1.Size = new Size(240, 24) ;
                this.Controls.AddRange(new Control[] {ListBox1, textBox1}) ;

                // Populates the list box using DataSource.
                // DisplayMember is used to display just the long name of each state.
                ArrayList USStates = new ArrayList()    ;
                USStates.Add(new USState("Alabama", "AL"));
                USStates.Add(new USState("Washington", "WA"))  ;
                USStates.Add(new USState("West Virginia", "WV"));
                USStates.Add(new USState("Wisconsin", "WI")) ;
                USStates.Add(new USState("Wyoming", "WY"));

                ListBox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged);
                ListBox1.DataSource = USStates ;
                ListBox1.DisplayMember = "LongName"      ;
                ListBox1.ValueMember = "ShortName" ;

            }
            private void InitializeComponent()
            {
           
            }

            private void ListBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (ListBox1.SelectedIndex != -1)
                    textBox1.Text = ListBox1.SelectedValue.ToString();
            }
        }
    }
    2010年11月28日 5:31
  • 列“valueName”不属于表 。。。。。
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……


    您好,在我上面的解释中,第一句话就对datatable作了假设,假设有两列,所以您需要创建一个datatable。(我跳过这步了)请参考:

    System.Data.DataTable dataTable1 = new System.Data.DataTable();

                System.Data.DataColumn dataColumn1 = new System.Data.DataColumn();
                System.Data.DataColumn dataColumn2 = new System.Data.DataColumn();

                dataColumn1.ColumnName = "displayName";
                dataColumn2.ColumnName = "valueName";

                dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
                dataColumn1,
                dataColumn2});

    或请参考小欧的解释,也利于理解。

    2010年11月28日 5:58
    版主

全部回复

  • 您好,请参考:

               创建一个DataTable,假设本例中的DataTable由两列,一列是"displayName" 用来显示选中的文本,一列是"valueName"用来显示被选中的项的值。

                DataRow row = this.dataTable1.NewRow();
                row["displayName"] = "Name1";
                row["valueName"] = "value1";
                this.dataTable1.Rows.Add(row);

                row = this.dataTable1.NewRow();
                row["displayName"] = "Name2";
                row["valueName"] = "value2";
                this.dataTable1.Rows.Add(row);
                //this.dataSet1.Tables.Add(this.dataTable1);

                this.comboBox1.DataSource = this.dataTable1;
                this.comboBox1.DisplayMember = "displayName";
                this.comboBox1.ValueMember = "valueName";

                //设置当前项
                this.comboBox1.SelectedValue = "value2";

                //获取选中的项
                MessageBox.Show(this.comboBox1.SelectedValue.ToString());

                //遍历所有项
                foreach (object item in comboBox1.Items)
                {
                    DataRowView dataRowView = item as DataRowView;
                    MessageBox.Show(dataRowView.Row["valueName"].ToString());
                }

             combobox只有Text属性,显示当前选中项的文本。

    2010年11月28日 2:16
    版主
  • 列“valueName”不属于表 。。。。。
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月28日 3:51
  • 列“valueName”不属于表 。。。。。
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……


    您好

    假如您是参考Jyiuan 的范例,您的DataTable 必须有displayName 与valueName 栏位,

    假如您的DataTable 是透过 Select [display],[value] from [TableName] 取得,

    则改为

                this.comboBox1.DataSource = this.dataTable1;
                this.comboBox1.DisplayMember = "display";
                this.comboBox1.ValueMember = "value";

    http://www.dotblogs.com.tw/chou/archive/2009/03/20/7571.aspx

     


    歡迎參觀我的Blog.NET菜鳥自救會

    2010年11月28日 4:47
  • using System;
    using System.Windows.Forms ;
    using System.Drawing ;
    using System.Collections ;


    namespace MyListControlSample
    {

        public class USState
        {
            private string myShortName ;
            private string myLongName ;
       
            public  USState(string strLongName, string strShortName)
            {

                this.myShortName = strShortName;
                this.myLongName = strLongName;
            }

            public string ShortName
            {
                get
                {
                    return myShortName; } } public string LongName
            {
           
                get
                {
                    return myLongName ;
                }
            }

            public override string ToString()
            {
                return this.ShortName + " - " + this.LongName;
            }
        }

        public class ListBoxSample3:Form
        {
            private ListBox ListBox1 = new ListBox();
            private TextBox textBox1 = new TextBox() ;
           
            [STAThread]
            static void Main()
            {
                Application.Run(new ListBoxSample3()) ;
            }

            public ListBoxSample3()
            {
           
                this.ClientSize = new Size(292, 181) ;
                this.Text = "ListBox Sample3" ;

                ListBox1.Location = new Point(24, 16) ;
                ListBox1.Name = "ListBox1" ;
                ListBox1.Size = new Size(232, 130) ;
               


                textBox1.Location = new Point(24, 160) ;
                textBox1.Name = "textBox1" ;
                textBox1.Size = new Size(240, 24) ;
                this.Controls.AddRange(new Control[] {ListBox1, textBox1}) ;

                // Populates the list box using DataSource.
                // DisplayMember is used to display just the long name of each state.
                ArrayList USStates = new ArrayList()    ;
                USStates.Add(new USState("Alabama", "AL"));
                USStates.Add(new USState("Washington", "WA"))  ;
                USStates.Add(new USState("West Virginia", "WV"));
                USStates.Add(new USState("Wisconsin", "WI")) ;
                USStates.Add(new USState("Wyoming", "WY"));

                ListBox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged);
                ListBox1.DataSource = USStates ;
                ListBox1.DisplayMember = "LongName"      ;
                ListBox1.ValueMember = "ShortName" ;

            }
            private void InitializeComponent()
            {
           
            }

            private void ListBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (ListBox1.SelectedIndex != -1)
                    textBox1.Text = ListBox1.SelectedValue.ToString();
            }
        }
    }
    2010年11月28日 5:31
  • 列“valueName”不属于表 。。。。。
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……


    您好,在我上面的解释中,第一句话就对datatable作了假设,假设有两列,所以您需要创建一个datatable。(我跳过这步了)请参考:

    System.Data.DataTable dataTable1 = new System.Data.DataTable();

                System.Data.DataColumn dataColumn1 = new System.Data.DataColumn();
                System.Data.DataColumn dataColumn2 = new System.Data.DataColumn();

                dataColumn1.ColumnName = "displayName";
                dataColumn2.ColumnName = "valueName";

                dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
                dataColumn1,
                dataColumn2});

    或请参考小欧的解释,也利于理解。

    2010年11月28日 5:58
    版主