文章类型: .NET
关键词: dotnet,CSharp,winform,ComboBox,控件,添加,请选择,全部,使用,注意事项
内容摘要: winform中为ComboBox控件添加“请选择”或“全部”选项

winform中为ComboBox控件添加“请选择”或“全部”选项及使用时的注意事项

2018/8/16 17:03:58    来源:apple    阅读:

Winform中的下拉列表控件ComboBox,在使用DataSource属性赋数据源后,想添加“请选择”或“全部”这样一个选项,比WEB中要麻烦一些,经过测试,我们只能在数据源上做文章,即需要在数据源中添加这样一项。

一般开发中,最常用的数据源有两种,一是List泛型集合,二是DataTable

示例代码如下:

一:数据源是List集合

 List<BookType> list = GetList() as List<BookType>; //GetList是一个返回IList的方法

list.Insert(0,new BookType("0","请选择"));//如果实体对象有多个属性,可以在实例化该对象后,只为用到的两个属性赋值

comboBox1.DataSource = list;

comboBox1.DisplayMember = "Typename";

comboBox1.ValueMember = "typeId";

二:数据源是DataTable

DataTable dt=GetDataTable();

DataRow dr = dt.NewRow();

dr["typeID"] = "0";

dr["typeName"] = "请选择";

dt.Rows.InsertAt(dr, 0);               

cbxType.DataSource = dt;

cbxType.DisplayMember = "typeName";

cbxType.ValueMember = "typeID";

使用时请注意:

注意:需要将“DisplayMember”和“ValueMember”属性的指定放在“DataSource”的指定的前面,否则在一定条件下出现“.SelectedIndex = 0”的指定失败。

如下图所示的“所属格子”中的绑定内容项指定失败,实际上存在内容,估计由于属性指定时加载先后顺序问题造成失败!!!

图片.png

图片.png

对应的代码为:

......
string layerGridName = string.Empty;
                if (layerID > 0)
                {
                    layerGridName = "所有可用格子" + "_[" + layerGridList.Count + "]";
                }
                else
                {
                    layerGridName = "所有分层可用格子" + "_[" + layerGridList.Count + "]";
                }

                LayerGrid selectAllFreeGrid = new LayerGrid();
                selectAllFreeGrid.Id = -1;
                selectAllFreeGrid.GridCode = layerGridName;
                layerGridList.Insert(0, selectAllFreeGrid);//如果实体对象有多个属性,可以在实例化该对象后,只为用到的两个属性赋值

                bExecuteCboGridIndexChanged = false;
                cboGrid.DataSource = null;
                cboGrid.Items.Clear();//清空节点,避免了设置 DataSource 属性后无法显示修改项集合
                //注意:需要将“DisplayMember”和“ValueMember”属性的指定放在“DataSource”的指定的前面,否则在一定条件下出现“.SelectedIndex = 0”的指定失败。
                cboGrid.DataSource = layerGridList;
                cboGrid.DisplayMember = "GridCode";
                cboGrid.ValueMember = "Id";
                cboGrid.SelectedIndex = 0;
                bExecuteCboGridIndexChanged = true;
                cboGrid_SelectedIndexChanged(null, null);

正确的代码为及执行结果图示:

string layerGridName = string.Empty;
                if (layerID > 0)
                {
                    layerGridName = "所有可用格子" + "_[" + layerGridList.Count + "]";
                }
                else
                {
                    layerGridName = "所有分层可用格子" + "_[" + layerGridList.Count + "]";
                }

                LayerGrid selectAllFreeGrid = new LayerGrid();
                selectAllFreeGrid.Id = -1;
                selectAllFreeGrid.GridCode = layerGridName;
                layerGridList.Insert(0, selectAllFreeGrid);//如果实体对象有多个属性,可以在实例化该对象后,只为用到的两个属性赋值

                bExecuteCboGridIndexChanged = false;
                cboGrid.DataSource = null;
                cboGrid.Items.Clear();//清空节点,避免了设置 DataSource 属性后无法显示修改项集合
                cboGrid.DisplayMember = "GridCode";
                cboGrid.ValueMember = "Id";
                //注意:需要将“DisplayMember”和“ValueMember”属性的指定放在“DataSource”的指定的前面,否则在一定条件下出现“.SelectedIndex = 0”的指定失败。
                cboGrid.DataSource = layerGridList;
                cboGrid.SelectedIndex = 0;
                bExecuteCboGridIndexChanged = true;
                cboGrid_SelectedIndexChanged(null, null);

图片.png

↑ 上一篇文章:T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法 关键词:T-sql,语句,修改,SQL,Server,数据库逻辑.. 发布日期:2018/8/8 15:21:55
↓ 下一篇文章:C# 中怎么将string转换成int型 关键词:C#,string,转换,int 发布日期:2018/8/17 14:28:17
相关文章:
C#的WinForm开发中完美解决窗体中的各个控件同比自动放缩大小 关键词:C#,Winform,窗体,各个控件,同比例,自动放缩大小,完美解决 发布日期:2016-01-22 19:11
使用TreeView控件来显示解析出来Xml文件数据的动态加载 关键词:C#,WinForm,TreeView,Xml,XML文件,动态,加载,动态生成控件 发布日期:2015-07-22 12:08
VC++中ListBox控件的使用 关键词:VC++中ListBox控件的使用 发布日期:2017-05-15 10:48
相关目录:.NETVC&C++
我要评论
正在加载评论信息......