VS2010 winform开发笔记---combox的SelectedIndexChanged事件及级联问题
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 ComboBox的DataSource,DisplayMember和ValueMember属性的
设置顺序的问题。《参考博客》
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的数据库加载方法即可!
VS2010 winform开发笔记---combox的SelectedIndexChanged事件及级联问题的更多相关文章
- Xamarin开发笔记—WebView双项事件调用
1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数. WebView展示的代码如下: var htmlS ...
- WinForm开发笔记
Button Button默认不产生DoubleClick事件 (MSDN说明:https://msdn.microsoft.com/zh-cn/library/system.windows.form ...
- Xamarin开发笔记—百度在线语音合成
语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 技术选型:语音合成初步选择有两个,一是讯飞.二是百度. 因为使用的是X ...
- Xamarin开发笔记—设备类&第三方弹窗的使用和注意事项
一.设备类是Xamarin重要开发组成部分,下面介绍一下设备类的主要用法: //唤醒打电话 Device.OpenUri(new Uri("tel:180xxxxxxxx")); ...
- [小问题笔记(二)] 可能导致DropDownList的SelectedIndexChanged事件不触发的几种情况
遇到SelectedIndexChanged事件没有触发,可以依次检查以下几种情况是否在程序中出现. 一.DropDownList的不同option设置了相同的value . 二.没有写 AutoPo ...
- C#开发笔记之02-什么时候使用OnXXX方法,这种命名是什么意思?
C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/958 访问. 你也许经常会看到别人写的代码里有OnXX ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java进击C#——应用开发之WinForm开发
本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...
随机推荐
- LINQ查询表达式---------group子句
LINQ查询表达式---------group子句 LINQ表达式必须以from子句开头,以select或group子句结束.使用guoup子句来返回元素分组后的结果.group 子句返回一个 IGr ...
- C#中??操作符的使用
为了实现Nullable数据类型转换成non-Nullable型数据,就有了一个这样的操作符”??(两个问号)“,双问号操作符意思是取所赋值??左边的,如果左边为null,取所赋值??右边的, 比如i ...
- Android零基础入门第55节:ImageSwitcher和TextSwitcher使用
原文:Android零基础入门第55节:ImageSwitcher和TextSwitcher使用 上一期我们了解了ViewAnimator组件和ViewSwitcher组件的使用,你都掌握了吗?本期一 ...
- 用TTcpClient和TTcpServer进行文件的传输
发送数据时有Sendln,SendBuf,SendStream.接收数据时有Receiveln,ReceiveBuf,当时我很奇怪为什么没有ReceiveStream.因为很自然的想到是对应关系的.但 ...
- ML:吴恩达 机器学习 课程笔记(Week1~2)
吴恩达(Andrew Ng)机器学习课程:课程主页 由于博客编辑器有些不顺手,所有的课程笔记将全部以手写照片形式上传.有机会将在之后上传课程中各个ML算法实现的Octave版本. Linear Reg ...
- Setting up multi nodes live migration in Openstack Juno with devstack
Setting up multi nodes live migration in Openstack Juno with devstack Summary Live migration overvie ...
- ASP.NET Core 通过 Microsoft.DotNet.Watcher.Tools 实现热部署
之前开发前端的时候,webpack 会有热更新工具,在修改了代码之后,自动将代码编译,实时展现到页面上,给开发带来了极大的方便. Java也可以通过第三方插件JRebel实现热部署,不用频繁的重启To ...
- 用汇编语言给XP记事本添加“自动保存”功能 good
[文章标题]: 用汇编语言给XP记事本添加“自动保存”功能 [文章作者]: newjueqi [作者邮箱]:zengjiansheng1@126.com [作者QQ]:190678908 [使用工具] ...
- Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- XML转义字符 如"&"
解析数据 XML 解析器通常情况下会处理XML文档中的所有文本. 当XML元素被解析的时候,XML元素内部的文本也会被解析,例如: <message>Hello Word!</mes ...