WinForm下ComboBox設定SelectedValue總結
阿新 • • 發佈:2018-11-15
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
最近在專案中處理一個winForm中設定ComboBox值,奇怪的是用一個物件匹配ComboBox的Datasource集合的一個物件時,設定SelectedValue時,竟然得到SelectedValue為null。
網上搜索一下,有說是如果用DateSet繫結時,SelectedValue得到的是null或DataRowView。
後來反覆實踐,發現可以用以下方法實現:
[c-sharp] view plain copy print ?- private void SetValueByItem()
- {
- Area a = new
- a.Area_ID = "8";
- a.Area_Name = "第8名";
- cbList.SelectedItem = ac.FindAll(delegate
- lbResult.Text = cbList.SelectedItem.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
- }
其他兩種設定方式:
[c-sharp] view plain copy print ?- 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 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();
- }
完整程式碼:
[c-sharp] view plain copy print ?- 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; } }
- }
- }
邀月注:本文版權由邀月和CSDN共同所有,轉載請註明出處。
助人等於自助! [email protected]