WinForm下ComboBox设定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();
}
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();
}

完整代码:

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


posted @ 2011-01-22 22:27  邀月  阅读(4829)  评论(11编辑  收藏  举报