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; } }
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM