热门标签 | 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";

推荐阅读
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • spring(22)JdbcTemplate
    2019独角兽企业重金招聘Python工程师标准###1.导入jar包,必须jar包:c3p0、mysql-connector、beans、con ... [详细]
  • CoreData 表关联详解
    在企业中,通常会有多个部门,每个员工隶属于某个部门。这种情况下,员工表和部门表之间就会形成关联关系。本文将详细介绍如何在CoreData中实现表关联,并通过示例代码展示如何添加和查询关联数据。 ... [详细]
  • 在处理 GridView 中的行记录时,有时需要动态地添加或删除行,而无需对数据库中的实际数据进行任何更改。本文介绍了如何实现这一功能,确保操作仅限于前端展示层面,而不影响后端数据库的完整性。通过这种方法,用户可以在不修改数据库记录的情况下,灵活地管理 GridView 中的数据展示。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 本文介绍如何通过参数化查询来防止SQL注入攻击,确保数据库的安全性。示例代码展示了在C#中使用参数化查询添加学生信息的方法。 ... [详细]
  • 本文将详细介绍 SQL 中的 SUM 函数及其用法,并通过具体示例展示如何在实际场景中应用。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • 通过在项目中引用 NuGet 包 `ExcelDataReader`,可以实现高效地读取和导入 Excel 文件中的数据。具体方法是在项目中执行 `Install-Package ExcelDataReader` 命令,然后通过定义一个 `LeadingIn` 方法并传入上传文件的路径来完成数据导入。该方法不仅简化了代码逻辑,还显著提升了数据处理的效率和可靠性。 ... [详细]
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社区 版权所有