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 @   邀月  阅读(4856)  评论(11编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示