Combox的SelectedValue 和SelectedItem有啥区别
它们主要在使用 数据绑定(DataSource) 时才有明显的分工。直接 Items.Add("文字") 时,两者差别不大。
为了让你秒懂,直接看下面的例子:
1. 先定义一个“东西”(实体类)
public class Student { public int Id { get; set; } // 学号 public string Name { get; set; } // 姓名 }
2. 绑定到 ComboBox
// 准备数据 List<Student> list = new List<Student> { new Student { Id = 1, Name = "张三" }, new Student { Id = 2, Name = "李四" } }; comboBox1.DataSource = list; comboBox1.DisplayMember = "Name"; // 下拉框里显示“姓名” comboBox1.ValueMember = "Id"; // 选中的时候,取“学号”
3. 用户选中“张三”后,两者的区别:
| 属性 | 返回的值 | 返回类型 | 你可以理解成 |
|---|---|---|---|
SelectedItem |
{ Id = 1, Name = "张三" } 这个整个对象 |
Student(你需要强转) |
选中了一整张学生档案卡 |
SelectedValue |
1 |
object(里面存的是 int) |
只把档案卡上的学号抽了出来 |
4. 代码里怎么用(区别最大的一点)
如果你用 SelectedItem(拿到对象,属性全都有):
// 因为返回的是 object,必须强转成 Student Student stu = (Student)comboBox1.SelectedItem; int id = stu.Id; // 拿到 1 string name = stu.Name; // 拿到 "张三"
如果你用 SelectedValue(只拿绑定的值):
// 直接取 ValueMember 绑定的属性(Id) int id = Convert.ToInt32(comboBox1.SelectedValue); // 拿到 1 // 想拿 Name?拿不到,因为 SelectedValue 不包含 Name 这个属性!
5. 特别注意(容易踩的坑)
-
如果没有设置
ValueMember:SelectedValue默认返回的是SelectedItem本身(或者null),所以千万不要在不绑数据源时乱用SelectedValue。 -
SelectedValue不一定是数字:如果你的ValueMember绑定了"Name"(字符串),那SelectedValue拿到的就是 "张三" 这个字符串。 -
类型转换:
SelectedValue返回的是object,如果是数字记得转成int或double,否则比较时容易出 bug。
6. 什么时候用哪个?(极简建议)
-
想直接操作这个对象的数据(比如 Id 和 Name 都要用):用
SelectedItem,强转后用起来最顺手。 -
只想把选中的结果存进数据库(只存外键 Id):用
SelectedValue,直接Convert.ToInt32拿到 ID 就能保存,省去对象.Id的步骤。

浙公网安备 33010602011771号