WinForm下ComboBox设定SelectedValue总结 (SelectedValue==null解决办法)

实践发现:以SelectedIndex赋值让ComboBox自动选中时能获得SelectedValue;以SelectedText赋值让ComboBox自动选中时获得SelectedValue为空。

this.comboBox1.SelectedIndex = this.comboBox1.FindString(room);

这样能获得comboBox1.SelectedValue值。

this.comboBox1.SelectedText = room;

这样获得comboBox1.SelectedValue值为空。

 

下面为转帖内容:

最近在项目中处理一个winForm中设定ComboBox值,奇怪的是用一个对象匹配ComboBox的Datasource集合的一个对象时,设置SelectedValue时,竟然得到SelectedValue为null。

网上搜索一下,有说是如果用DateSet绑定时,SelectedValue得到的是null或DataRowView。

 

后来反复实践,发现可以用以下方法实现:

private void SetValueByItem()
        {
            Area a = new Area();
            a.Area_ID = "8";
            a.Area_Name = "第8名";
            cbList.SelectedItem = ac.FindAll(delegate(Area ar) { return ar.Area_ID == a.Area_ID; })[0];
            lbResult.Text = cbList.SelectedItem.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
        }
其他两种设置方式:
 private void SetValueByValue()
        {
            Area a = new Area();
            a.Area_ID = "8";
            a.Area_Name = "第8名";
            cbList.SelectedValue = a.Area_ID;
            lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
        }
 
完整代码:
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace WinFormCombobox

{

    public partial class frmMain : Form

    {

        public frmMain()

        {

            InitializeComponent();

        }

        #region Members

        AreaLists ac;

        public AreaLists GetTestArea()

        {

            AreaLists al = new AreaLists();

            for (int i = 1; i < 11; i++)

            {

                Area a = new Area();

                a.Area_ID = i.ToString();

                a.Area_Name = "" + i.ToString() + "";

                al.Add(a);

            }

            return al;

        }

        #endregion

        #region Events

        private void frmMain_Load(object sender, EventArgs e)

        {

            ac = GetTestArea();

            cbList.DataSource = ac;

            cbList.DisplayMember = "Area_Name";

            cbList.ValueMember = "Area_ID";

        }

        private void btnSetCombobox_Click(object sender, EventArgs e)

        {

            ////SetValue0();

            //SetValueByValue();

            ////SetValueByItem();

            SetValueByText();

        }

        #endregion

        #region Methods

        private void SetValue0()

        {

            Area a = new Area();

            a.Area_ID = "8";

            a.Area_Name = "第8名";

            cbList.DataSource = GetTestArea();

            cbList.DisplayMember = "Area_Name";

            cbList.ValueMember = "Area_ID";

            cbList.SelectedValue = a.Area_ID;

            lbResult.Text = cbList.SelectedValue.ToString();

        }

        private void SetValueByValue()

        {

            Area a = new Area();

            a.Area_ID = "8";

            a.Area_Name = "第8名";

            cbList.SelectedValue = a.Area_ID;

            lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();

        }

        private void SetValueByItem()

        {

            Area a = new Area();

            a.Area_ID = "8";

            a.Area_Name = "第8名";

            cbList.SelectedItem = ac.FindAll(delegate(Area ar) { return ar.Area_ID == a.Area_ID; })[0];

            lbResult.Text = cbList.SelectedItem.GetType().ToString() + ":" + cbList.SelectedValue.ToString();

        }

        private void SetValueByText()

        {

            Area a = new Area();

            a.Area_ID = "8";

            a.Area_Name = "第8名";

            cbList.SelectedIndex = cbList.FindString(a.Area_Name);

            lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();

        }

        #endregion

    }

}



using System;

using System.Collections.Generic;

using System.Text;

namespace WinFormCombobox

{

    #region Area

    public class Area

    {

        private string m_Area_ID;

        public string Area_ID

        {

            get { return m_Area_ID; }

            set { m_Area_ID = value; }

        }

        private string m_Area_Name;

        public string Area_Name

        {

            get { return m_Area_Name; }

            set { m_Area_Name = value; }

        }

        private double m_Area_Order;

        public double Area_Order

        {

            get { return m_Area_Order; }

            set { m_Area_Order = value; }

        }

    }

    #endregion

    [Serializable]

    public class AreaLists : List<Area>

    {

        private int _maxItems = 0;

        public int MaxItems { get { return this._maxItems; } set { this._maxItems = value; } }

    }

}

 

 

你可能感兴趣的:(combobox)