ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

界面组件DevExpress控件几种常见下拉列表数据展示的方式分享

界面组件DevExpress控件几种常见下拉列表数据展示的方式分享 在Winform开发中中我们为了方便客户选择往往使用系统的字典数据选择毕竟选择总比输入来的快捷、统一一般我们都会简单封装一下以便方便对控件的字典值进行展示处理本文介绍DevExpress控件的几种常见的字典绑定展示方式希望我们在实际WinForms项目中使用到。DevExpress新旧版本帮助文档获取可点击这篇文章查看——《界面控件DevExpress v26.1帮助文档大全CHM版本》常规下拉列表的处理常规的处理方式可能会使用ComboBoxEdit 控件来承载下拉列表下拉列表的值可以是固定的列表也可以来自字典的方式具体根据实际情况而定大概的效果如下所示。单击下拉列表会展示一些常规的字典项目如下效果所示。如果使用控件原始方式我们绑定控件的下拉列表值的做法如下所示。combo.Properties.BeginUpdate();//可以加快 combo.Properties.Items.Clear(); combo.Properties.Items.AddRange(itemList); combo.Properties.EndUpdate();//可以加快不过我们一般倾向于高效率的界面处理一般会编写各类型的界面控件的扩展函数用于快速处理。不同类型的控件我们用一个独立的扩展文件来处理这样方便维护的同时也方便借鉴完善。例如对于上面的控件我们的绑定方法的扩展函数如下所示。/// summary /// 绑定下拉列表控件为指定的数据字典列表 /// /summary /// param namecombo下拉列表控件/param /// param nameitemList数据字典列表/param /// param namedefaultValue控件默认值/param /// param nameemptyFlag是否加入空值选项/param public static void BindDictItems(this ComboBoxEdit combo, ListCListItem itemList, string defaultValue, bool emptyFlag true) { combo.Properties.BeginUpdate();//可以加快 combo.Properties.Items.Clear(); combo.Properties.Items.AddRange(itemList); if (emptyFlag) { combo.Properties.Items.Insert(0, new CListItem()); } if (itemList.Count 0) { if (!string.IsNullOrEmpty(defaultValue)) { combo.SetComboBoxItem(defaultValue); } else { combo.SelectedIndex 0; } } combo.Properties.EndUpdate();//可以加快 }其中方法增加了一些默认值以及是否追加空白项目的处理。当然我们为了适应各种数据源的绑定方式我们重载了很多不同的函数处理如下截图所示。当然对于其他同类型的下列列表控件也是这样处理即可。这样界面上我们就可以指定调用绑定的处理操作了。private void InitDictItem() { this.txtManufacture.Items.Clear(); this.txtManufacture.Items.AddRange(DictItemUtil.GetDictByDictType(供货商)); this.txtBigType.Items.Clear(); this.txtBigType.Items.AddRange(DictItemUtil.GetDictByDictType(备件属类)); }或者我们可以根据字典的类型来进一步做一个扩展函数来简化绑定的处理。/// summary /// 绑定下拉列表控件为指定的数据字典列表 /// /summary /// param namecontrol下拉列表控件/param /// param namedictTypeName数据字典类型名称/param /// param namedefaultValue控件默认值/param /// param nameemptyFlag是否添加空行/param public static void BindDictItems(this ComboBoxEdit control, string dictTypeName, string defaultValue, bool emptyFlag true) { Dictionarystring, string dict BLLFactoryDictData.Instance.GetDictByDictType(dictTypeName); ListCListItem itemList new ListCListItem(); foreach (string key in dict.Keys) { itemList.Add(new CListItem(key, dict[key])); } control.BindDictItems(itemList, defaultValue, emptyFlag); }使用了这些简化的扩展函数我们可以对系统的字典根据字典类型来进行绑定了。private void InitDictItem() { this.txtManufacture.BindDictItems(供货商); this.txtSearchManufacture.BindDictItems(供货商); this.txtSearchDept.BindDictItems(部门); }如上代码所示简化了很多处理就一个函数就可以绑定了系统字典类型的下拉列表了。带序号的GridLookUpEdit下拉列表有时候我们在一些常见的系统里面经常看到一些带有序号的下拉列表其实里面就是一个GridControl的控件我们只需要赋值对应的列表数据源以及设置显示的列内容并重写下序号的展示处理就可以实现了。我们先来看看实际的效果。上面的列表是一个GridControl的内在控件我们使用这个 GridLookUpEdit下拉列表控件的时候设置好GridControl的数据源和显示的列就基本上可以了。//绑定数据源和显示的内容、隐藏值 this.txtProjectList.Properties.DataSource list; this.txtProjectList.Properties.ValueMember Value; this.txtProjectList.Properties.DisplayMember Text; //设置Grid显示的列信息 var columns new ListLookUpColumnInfo() { new LookUpColumnInfo(Value, 显示名称) }; for (int i 0; i columns.Count; i) { this.txtProjectList.Properties.View.CreateColumn(columns[i].FieldName, columns[i].Caption, columns[i].Width, true, UnboundColumnType.Bound, DefaultBoolean.False, FixedStyle.None); } //其他属性设置 this.txtProjectList.Properties.ImmediatePopup true; this.txtProjectList.Properties.TextEditStyle TextEditStyles.Standard; this.txtProjectList.Properties.PopupWidthMode DevExpress.XtraEditors.PopupWidthMode.ContentWidth; //设定列表的序号的宽度和显示文本 this.txtProjectList.Properties.View.IndicatorWidth 40; this.txtProjectList.Properties.View.CustomDrawRowIndicator (s, e) { if (e.Info.IsRowIndicator e.RowHandle 0) { e.Info.DisplayText (e.RowHandle 1).ToString(); } };那么如果我们需要使用扩展函数来简化实际的代码那么应该如何封装这个GridLookupEdit的下列控件呢我们编写的扩展函数代码如下所示。/// summary /// 绑定控件的数据源 /// /summary /// param namelookup控件对象/param /// param namedataSource数据源/param /// param namedisplayMember显示字段/param /// param namevalueMember值字段/param /// param nameshowRowIndicator是否显示序号/param /// param namelookUpColumnInfos显示的列/param /// returns/returns public static object BindDictItems(this GridLookUpEdit lookup, object dataSource, string displayMember, string valueMember, bool showRowIndicator true, params LookUpColumnInfo[] lookUpColumnInfos) { lookup.Properties.DataSource dataSource; lookup.Properties.DisplayMember displayMember; lookup.Properties.ValueMember valueMember; lookup.Properties.View.Columns.Clear(); for (int i 0; i lookUpColumnInfos.Length; i) { lookup.Properties.View.CreateColumn(lookUpColumnInfos[i].FieldName, lookUpColumnInfos[i].Caption, lookUpColumnInfos[i].Width, true, UnboundColumnType.Bound, DefaultBoolean.False, FixedStyle.None); } lookup.Properties.ImmediatePopup true; lookup.Properties.TextEditStyle TextEditStyles.Standard; if (showRowIndicator) { lookup.Properties.View.IndicatorWidth 40; //重写序号显示默认不显示数值 lookup.Properties.View.CustomDrawRowIndicator (s, e) { if (e.Info.IsRowIndicator e.RowHandle 0) { e.Info.DisplayText (e.RowHandle 1).ToString(); } }; } return dataSource; }这样处理后界面上简化了不少代码如下使用代码所示。var list DictItemUtil.GetDictByDictType(备件类别); var columns new ListLookUpColumnInfo() { new LookUpColumnInfo(Value, 显示名称) }; this.txtProjectList2.BindDictItems(list, Text, Value, true, columns.ToArray());通过上面的两种方式我们可以得到常见的两种下拉列表的数据绑定展示方式。而对于其他类似的下拉列表如树形列表带搜索的SearchLookupEdit等控件我们也可以用类似的方式编写自定义的扩展函数这样我们使用起来就非常方便的了。类似我们下面的做法方式分门别类的对它们进行一些简单的封装处理。本文转载自博客园 - 伍华聪
返回列表