DisplayMember绑定需要显示的数据表字段,

而ValueMember绑定需要获取选择的项的值。

然后通过

combo.SelectedValue就可以取得选中项的值了。

DisplayMember会显示在你的下拉框中,ValueMember的值和下拉框显示的值一一对应,并不在下拉框显示的。

所对应的值就是一条记录里面 有标识列ID(唯一) 有显示的列(如名称,可重复)
ValueMember 可以成为名称,也可成为ID
但是一般来说都只绑定ID 这样好处理,也很方便识别,
DisplayMember 是绑定显示的数据 如:北京
一般DisplayMember是显示给客户看的
 而ValueMember 是绑定处理程序标识 给程序员看的。

------------------------------------------------------------------------------------------

比如数据库一个字段 性别

用 0或者 1存储

combobox中DisplayMember显示为男或者女,ValueMember绑定的对应数据库的字段

当你保存时,要存到数据库0或者1,这时候直接获取选中的valuemenber时存储就可以了

---------------------------------------------------------------------------------------------------------------------------------

一般做法:

首先需要指定 combox.DataSource,
然后用表DataSource的字段名设置combox 的 ValueMember和DisplayMember ,
那么当你选择combox 的一个item时,你直接可见的是此item的 DisplayMember 对应内容,
而此 item的值是ValueMember 的对应内容。

 

关于.net winform ComboBoxDataSourceDisplayMemberValueMember属性的
设置顺序的问题。
《参考博客》

ComboBox的DataSource属性为object类型,但是需要实现IListSource接口的类型。

当把DataTable赋值给该属性后,如果此时没有指定ComboBox的DisplayMember和ValueMember属性的话,

这时获得的ComboBox的SelectValue属性将是System.Data.DataRowView的一个实例。

据此推测DataTable中实现的IListSource接口中的GetList()方法应该返回的是DataTable的

DefaultView,也就是DataView的一个实例是DataRowView的集合。而因为没有指定DisplayMember和ValueMember

属性,所以ComboBox直接把DataView中的每一个DataRowView实例填充到列表中。

这样的话就可能在ComboBox的SelectedIndexChanged事件处理中产生错误。

为了避免这个问题应该先设置DisplayMember和ValueMember属性,然后再设置DataSource属性。

避免先设置DataSource属性。

例如:

        public static void SetShopComboSpecial(ComboBox combo)

        {

            DataTable dt = CommonService.GetShopSpecial();

            if (dt == null) throw new Exception();

            combo.ValueMember = "SHOPID";

            combo.DisplayMember = "COMBO_DISPLAY";

            combo.DataSource = dt;

        }

关于winform的combobox联动问题的解决方案:

在使用DataSource添加加载值(从数据库),只要一赋值,添加ValueMember等就会触发selectedindexChanged事件,与写在formload里无关!

 private void Form1_Load(object sender, EventArgs e)
{
this.listBox1.Items.Add("软件部");
this.listBox1.Items.Add("人事部");
this.listBox1.Items.Add("财务部");
this.listBox1.Items.Add("硬件部");
this.listBox1.SelectedIndex = -; //如果设置0,1,2,3则在load加载窗体时就会弹出对话框了!-1表示为空,因为设置1表示index变了,会触发事件 this.comboBox1.Items.Add("软件部");
this.comboBox1.Items.Add("人事部");
this.comboBox1.Items.Add("财务部");
this.comboBox1.Items.Add("硬件部");
//this.comboBox1.SelectedIndex = 0;//会触发comboBox1_SelectedIndexChanged事件 DataTable dt1 = new DataTable("部门表");
dt1.Columns.Add("部门项"); DataRow dr1 = dt1.NewRow();
dr1["部门项"] = "软件部";
dt1.Rows.Add(dr1); DataRow dr2 = dt1.NewRow();
dr2["部门项"] = "人事部";
dt1.Rows.Add(dr2); comboBox2.ValueMember = "部门项";
comboBox2.DisplayMember = "部门项";
comboBox2.DataSource = dt1;//使用DataSource赋值,设置ValueMember后肯定会触发当前comboBox2的comboBox2_SelectedIndexChanged事件 }

三个combobox级联的时候,在form_load事件中添加方法:从数据库加载combobox1的值,会触发此combobox的事件Shop_SelectedIndexChanged,在事件中填写设置第二个combobox的数据库加载方法即可!

最新文章

  1. MyCat:取代Cobar数据库中间件
  2. 解决: is not found. Have you run APT to generate them?
  3. aufomaper Queryable Extensions ProjectTo
  4. delphi之多线程编程
  5. C# 读取Excel
  6. Java各种类型占用的字节数
  7. 面向站长和网站管理员的Web缓存加速指南
  8. android:persistent属性
  9. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
  10. java数组中的三种排序方法中的冒泡排序方法
  11. c# datetime与 timeStamp(unix时间戳) 互相转换
  12. C# 把Div变为滚动条
  13. Setting up Scatter for Web Applications
  14. AngularJS中控制器继承
  15. scokte tcp/ip
  16. bzoj2565: 最长双回文串 pam
  17. ThinkPHP验证码类的使用
  18. WIN8配置IIS8.0+PHP+Mysql+Zend
  19. python 常见的内置函数
  20. Unreal Engine 4 笔记 2

热门文章

  1. Win10《芒果TV》商店版更新v3.1.3.0:优化应用速度,支持会员卡兑换
  2. 使用Notepad++远程编辑Ubuntu上的源码
  3. 写给非专业人士看的 *** 简介(同时也解释了GFW )
  4. Android零基础入门第2节:Android 系统架构和应用组件那些事
  5. 简单的Windows Webcam应用:Barcode Reader
  6. Delphi 10.2的 更新说明,所有官方资料:新特征和Bugfix列表,所有工具开发说明
  7. FMXUI中的三大杀器:TView、TLinearLayout、TRelativeLayout
  8. Qt给应用程序添加版本信息(对rc文件的设置,可利用QT内置变量)
  9. GetLastError()返回值列表(3259个错误列表)
  10. 2019年5月23日 AY 程序员调侃语录