热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

comboBox添加"请选择"

DataSetds读取数据第一种方法comboBox1.Items.Insert(0,请选择);第二种方法comboBox1.Items.Add(请选择);comboB

DataSet ds = 读取数据

//第一种方法
//comboBox1.Items.Insert(0,"请选择");
//第二种方法
//comboBox1.Items.Add("请选择");

comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";


comboBox1.Items.Insert(0,"请选择");或comboBox1.Items.Add("请选择");放在comboBox1.DataSource = ds.Tables[0];之前没有效果,放在comboBox1.DataSource = ds.Tables[0];之后出现错误:System.ArgumentException: 设置 DataSource 属性后无法修改项集合。

18 个解决方案

#1



DataSet ds = 读取数据
comboBox1.DataSource = null;
comboBox1.Items.Clear(); 

//第一种方法
comboBox1.Items.Insert(0,"请选择");
//第二种方法
//comboBox1.Items.Add("请选择");
 
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

#2


引用 1 楼 q107770540 的回复:

DataSet ds = 读取数据
comboBox1.DataSource = null;
comboBox1.Items.Clear(); 

//第一种方法
comboBox1.Items.Insert(0,"请选择");
//第二种方法
//comboBox1.Items.Add("请选择");
 
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

没有效果

#3


有3种办法
1.直接把这个东西放数据库里,一起查出来
2.修改数据源datatable,新增一行
3.不要使用绑定,而是代码增加Item

#4


针对2:
绑定之前
DataRow dr=ds.Tables[0].NewRow();
dr[0]="请选择";
ds.Tables[0].Rows.InsertAt(0,dr);

#5


应该是
dr["name"]="请选择";

#6


不要绑定,可以读取后添加

#7



comboBox1.Text = "请选择";
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

这样行不,反正就是给个请选择的提示嘛

#8


引用 7 楼 q3310017 的回复:

comboBox1.Text = "请选择";
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

这样行不,反正就是给个请选择的提示嘛

如果combobox设置成dropdownlist而不是dropdown,那么你只能赋值成列表里有的项,不能随便乱赋值
而如果设置成dropdown,那么用户就有可能手动录入数据,而不从列表里选择

#9


引用 8 楼 Z65443344 的回复:
Quote: 引用 7 楼 q3310017 的回复:


comboBox1.Text = "请选择";
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

这样行不,反正就是给个请选择的提示嘛

如果combobox设置成dropdownlist而不是dropdown,那么你只能赋值成列表里有的项,不能随便乱赋值
而如果设置成dropdown,那么用户就有可能手动录入数据,而不从列表里选择


引用 8 楼 Z65443344 的回复:
Quote: 引用 7 楼 q3310017 的回复:


comboBox1.Text = "请选择";
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";

这样行不,反正就是给个请选择的提示嘛

如果combobox设置成dropdownlist而不是dropdown,那么你只能赋值成列表里有的项,不能随便乱赋值
而如果设置成dropdown,那么用户就有可能手动录入数据,而不从列表里选择


原来如此

#10


这里给你个建议,不要为了方便而想一些很奇怪的办法,有时候遍历一下就行了。即使你采用了微软自身的绑定,微软也是遍历去做的啊。

            DataSet ds = 读取数据
            comboBox1.Items.Clear();
            
            comboBox1.Items.Add("请选择");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                comboBox1.Items.Add(row["id"].ToString(),row["name"].ToString());
            }

#11


引用 4 楼 Z65443344 的回复:
针对2:
绑定之前
DataRow dr=ds.Tables[0].NewRow();
dr[0]="请选择";
ds.Tables[0].Rows.InsertAt(0,dr);

大神,我不同意你这个做法,这样做会导致表的索引重建,当然在表数据很少的情况下,只是绑定到Commbox这个是没问题的,但是当数据很多的情况下,这个插入操作是会有效率问题的。以下是我的拙见:

            DataSet ds = 读取数据
            comboBox1.Items.Clear();
            
            comboBox1.Items.Add("请选择");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                comboBox1.Items.Add(row["id"].ToString(),row["name"].ToString());
            }

#12


引用 11 楼 lc2737 的回复:
Quote: 引用 4 楼 Z65443344 的回复:

针对2:
绑定之前
DataRow dr=ds.Tables[0].NewRow();
dr[0]="请选择";
ds.Tables[0].Rows.InsertAt(0,dr);

大神,我不同意你这个做法,这样做会导致表的索引重建,当然在表数据很少的情况下,只是绑定到Commbox这个是没问题的,但是当数据很多的情况下,这个插入操作是会有效率问题的。以下是我的拙见:

            DataSet ds = 读取数据
            comboBox1.Items.Clear();
            
            comboBox1.Items.Add("请选择");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                comboBox1.Items.Add(row["id"].ToString(),row["name"].ToString());
            }

如果数据很多的话,你遍历表去操作Items,难道效率问题不是更大吗?
要知道,绑定控件只刷新一次,而你每插入一个Item,combobox就刷新一次,界面重绘可比索引重建要慢的多了

#13


而且这样不仅会有效率问题,关键是界面会闪烁
仅仅是假死,如果假死0.5秒,大多数用户可能不会发现
而如果是频繁的闪0.5秒,人眼是能看到的

#14


引用 12 楼 Z65443344 的回复:
Quote: 引用 11 楼 lc2737 的回复:

Quote: 引用 4 楼 Z65443344 的回复:

针对2:
绑定之前
DataRow dr=ds.Tables[0].NewRow();
dr[0]="请选择";
ds.Tables[0].Rows.InsertAt(0,dr);

大神,我不同意你这个做法,这样做会导致表的索引重建,当然在表数据很少的情况下,只是绑定到Commbox这个是没问题的,但是当数据很多的情况下,这个插入操作是会有效率问题的。以下是我的拙见:

            DataSet ds = 读取数据
            comboBox1.Items.Clear();
            
            comboBox1.Items.Add("请选择");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                comboBox1.Items.Add(row["id"].ToString(),row["name"].ToString());
            }

如果数据很多的话,你遍历表去操作Items,难道效率问题不是更大吗?
要知道,绑定控件只刷新一次,而你每插入一个Item,combobox就刷新一次,界面重绘可比索引重建要慢的多了

这个每插入一个项就要刷新一次吗?这个是Winfrom程序?我还以为是Web程序

#15


引用 13 楼 Z65443344 的回复:
而且这样不仅会有效率问题,关键是界面会闪烁
仅仅是假死,如果假死0.5秒,大多数用户可能不会发现
而如果是频繁的闪0.5秒,人眼是能看到的

如果是Winform那我们使用

List items=new List();
            comboBox1.Items.AddRange(items.ToArray());

可以吗?

#16


我想想,好像UI会直接阻塞,不会刷新
如果放到线程里才会频闪

#17


推荐修改DataTable数据源(即插入一条你要的提示的数据)后再绑定

#18


感谢各位了,最后的解决方法是

DataSet ds = 读取数据
ArrayList mylist = new ArrayList();
mylist.Add(new DictionaryEntry("0", "请选择"));
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
          mylist.Add(new DictionaryEntry(ds.Tables[0].Rows[i]["id"], ds.Tables[0].Rows[i]["name"]));
}
this.comboBox1.DataSource = mylist;
this.comboBox1.DisplayMember = "Value";
this.comboBox1.ValueMember = "Key";

推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
author-avatar
pengwei8751150
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有