惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
S
SegmentFault 最新的问题
Jina AI
Jina AI
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
WordPress大学
WordPress大学
爱范儿
爱范儿
博客园 - Franky
量子位
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网

博客园 - Charles Chen

.Net Framework 4.x 程序到底运行在哪个 CLR 版本之上(ZT) C#常用工具类——Excel操作类(ZT) C#程序以管理员权限运行(ZT) why happen "WaitHandles must be less than or equal to 64" fsn文件解析(C#) MS SQL执行大脚本文件时,提示“内存不足”的解决办法() OLDB读取excel的数据类型不匹配的解决方案(ZT) 加密配置文件(App.Config和Web.config)中connectionStrings通用方法 WinForm中使用XML文件存储用户配置及操作本地Config配置文件(zt) 理解DllImportAttribute中的属性 Winform中消息循环、异步操作、Control.Invoke&Control.BeginInvoke学习 Winform打包程序制作的快捷方式指向错误的位置(指向安装包文件) Reflector导出.NET工程项目的修复 存储过程返回值及输出参数笔记 使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000)(ZT) SQL字符串的分组聚合(ZT) SQL中使用update inner join和delete inner join (ZT) 项目维护之WinXP IIS中HTTP500的来龙去脉 一次项目维护案例而对事务学习的笔记
C# ComboBox(DropDownList)数据绑定后,怎样再添加选项(ZT)
Charles Chen · 2011-05-25 · via 博客园 - Charles Chen

本文转载于:http://hi.baidu.com/yangyangye2008/blog/item/1775770215a22782d53f7c18.html

两者大同小异,之说comBoBox吧,我们知道数据绑定控件被绑定之后是无法再在里面添加数据的,因为这是后的DataSource是无法修改的!不管是先再comBoBox之前使用其属性Items下的Add方法添加都会被后来的DisplayMember覆盖,

①这样是不行的:

comboBox1.Items.Add("--选择所有--");

this.comboBox1.DataSource = EmployerSet;

this.comboBox1.DisplayMember = "EmployeesTable.FirstName";

这种错误时先添加一项殊不知,会被后来的覆盖掉!

②另外可能有人想的是:

this.comboBox1.DataSource = EmployerSet;

this.comboBox1.DisplayMember = "EmployeesTable.FirstName";

comboBox1.Items.Insert(0,"--选择所有--");

这一种是最普遍的错误,这时候错误会出现在红色位置:设置 DataSource 属性后无法修改项集合。

怎么解决了,在长期的经历中我发现还是有方法可行的,第二种最佳,是昨天做项目的时候发现的:

第一种方法,想修改绑定的数据源之后再绑定,代码如下:

DataTable dt = EmployerSet.Tables["EmployeesTable"];

DataRow dr = dt.NewRow();

dr["FirstName"] = "--选择所有--";

dt.Rows.InsertAt(dr, 0);

this.comboBox1.DataSource = dt;

this.comboBox1.DisplayMember = "FirstName";

方法二:

采用了数据源的管理对象BindingContext,先将当前项的值修改之后再赋予呈现成员

this.comboBox1.DataSource = EmployerSet;

DataRowView rowV = (DataRowView)this.BindingContext[EmployerSet, "EmployeesTable"].Current;

rowV["FirstName"] = "--选择所有--";

this.comboBox1.DisplayMember = "EmployeesTable.FirstName";

你可以测试发现其实 rowV["FirstName"]原本的值就是EmployeesTable.FirstName中的第一个值,只是后来被修改了,接着赋予其呈现成员,这里之所以修改数据源会成功,我自己的认为是使用到了数据的管理对象,就好像是管理员可以修改一样而别人无法修改!