• 自动秒收录
  • 软件:1973
  • 资讯:57997|
  • 收录网站:278291|

IT精英团

在Winform开发中 我们使用几个下拉列表来显示字典数据

在Winform开发中 我们使用几个下拉列表来显示字典数据

浏览次数:
评论次数:
编辑: 乐咏
信息来源: ITPUB
更新日期: 2022-09-24 01:07:44
摘要

在Winform开发中中,我们为了方便客户选择,往往使用系统的字典数据选择,毕竟选择总比输入来的快捷、统一,一般我们都会简单封装一下,以便方便对控件的字典值进行展示处理,本篇随笔介绍DevExpres

  • 正文开始
  • 相关阅读
  • 推荐作品

在Winform的开发中,为了方便客户的选择,我们经常使用系统化的字典数据选择。毕竟选择比输入更快更均匀。一般来说,我们只是简单地将其打包,以便于显示控件的字典值。本文介绍了几种常见的DevExpress控件的字典绑定显示方法,希望能在实际的WInform项目中使用。

00-1010对于常规处理,ComboBoxEdit控件可用于加载下拉列表。下拉列表的值可以是固定列表,也可以来自字典,这取决于实际情况。大致效果如下所示。

点击下拉列表,会显示一些常用词典条目,如下图效果所示。

如果使用原来的控件方式,我们绑定控件下拉列表值的方式如下。

组合。properties . begin update();//可以加速。

组合。properties . items . clear();

组合。properties . items . add range(item list);

组合。properties . end update();//可以加速。但是我们一般更倾向于高效的界面处理,一般会编写各种类型界面控件的扩展函数来进行快速处理。

不同类型的控件由一个独立的扩展文件处理,便于维护和参考。

例如,对于上面的控件,我们的绑定方法的扩展函数如下。

复制代码

///摘要

///将下拉列表控件绑定到指定的数据字典列表。

////摘要

///param name='combo '下拉列表控件/param

///param name='itemList '数据字典列表/param

///param name='defaultValue '控件默认值/param

///param name='emptyFlag '是否要添加null选项/param

public static void bindictitems(this ComboBoxEdit combo,ListCListItem itemList,string defaultValue,bool emptyFlag=true)

{

组合。properties . begin update();//可以加速。

组合。properties . items . clear();

组合。properties . items . add range(item list);

if(空标志)

{

组合。Properties.Items.Insert(,new CListItem('));

}

if (itemList。计数)

{

如果(!字符串。IsNullOrEmpty(defaultValue))

{

组合。SetComboBoxItem(default value);

}

其他

{

组合。SelectedIndex=;

}

}

组合。properties . end update();//可以加速。

}复制代码

p>其中方法增加了一些默认值以及是否追加空白项目的处理。

当然,我们为了适应各种数据源的绑定方式,我们重载了很多不同的函数处理,如下截图所示。

 当然对于其他同类型的下列列表控件也是这样处理即可。这样界面上,我们就可以指定调用绑定的处理操作了

复制代码
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 name="control">下拉列表控件</param>/// <param name="dictTypeName">数据字典类型名称</param>/// <param name="defaultValue">控件默认值</param>/// <param name="emptyFlag">是否添加空行</param>public static void BindDictItems(this ComboBoxEdit control, string dictTypeName, string defaultValue, bool emptyFlag = true){    Dictionary<string, string> dict = BLLFactory<DictData>.Instance.GetDictByDictType(dictTypeName);    List<CListItem> itemList = new List<CListItem>();    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("部门");}
复制代码

如上代码所示,简化了很多处理,就一个函数就可以绑定了系统字典类型的下拉列表了。

2、带序号的GridLookUpEdit下拉列表

有时候,我们在一些常见的系统里面,经常看到一些带有序号的下拉列表,其实里面就是一个GridControl的控件,我们只需要赋值对应的列表数据源,以及设置显示的列内容,并重写下序号的展示处理就可以实现了。

我们先来看看实际的效果。

上面的列表是一个GridControl的内在控件,我们使用这个 GridLookUpEdit下拉列表控件的时候,设置好GridControl的数据源和显示的列就基本上可以了。

复制代码
//绑定数据源和显示的内容、隐藏值this.txtProjectList.Properties.DataSource = list;this.txtProjectList.Properties.ValueMember = "Value";this.txtProjectList.Properties.DisplayMember = "Text";//设置Grid显示的列信息var columns = new List<LookUpColumnInfo>(){    new LookUpColumnInfo("Value", "显示名称")};for (int i = ; 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 >= )    {        e.Info.DisplayText = (e.RowHandle + 1).ToString();    }};
复制代码

 那么如果我们需要使用扩展函数来简化实际的代码,那么应该如何封装这个GridLookupEdit的下列控件呢,我们编写的扩展函数代码如下所示。

复制代码
/// <summary>        /// 绑定控件的数据源        /// </summary>        /// <param name="lookup">控件对象</param>        /// <param name="dataSource">数据源</param>        /// <param name="displayMember">显示字段</param>        /// <param name="valueMember">值字段</param>        /// <param name="showRowIndicator">是否显示序号</param>        /// <param name="lookUpColumnInfos">显示的列</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 = ; 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 >= )                    {                        e.Info.DisplayText = (e.RowHandle + 1).ToString();                    }                };            }            return dataSource;        }
复制代码

这样处理后,界面上简化了不少代码,如下使用代码所示。

复制代码
var list = DictItemUtil.GetDictByDictType("备件类别");var columns = new List<LookUpColumnInfo>(){    new LookUpColumnInfo("Value", "显示名称")};this.txtProjectList2.BindDictItems(list, "Text", "Value", true, columns.ToArray());
复制代码

通过上面的两种方式,我们可以得到常见的两种下拉列表的数据绑定展示方式。

而对于其他类似的下拉列表,如树形列表,带搜索的SearchLookupEdit等控件,我们也可以用类似的方式编写自定义的扩展函数,这样我们使用起来就非常方便的了。类似我们下面的做法方式,分门别类的对它们进行一些简单的封装处理。


以上就是我们对于常见控件使用的一些微薄经验,希望大家有所借鉴。

标签:控件 列表 字典
[安全框架]快速了解安全框架
« 上一篇 2022-09-24
  • [安全框架]快速了解安全框架
    0阅读 0条评论 个赞
    这篇文章就来说说市面上的安全框架,并没有详细解释。目录【安全框架】快速了解安全框架说说安全框架什么是安全框架?安全框架又有哪些?ShiroSpringSecuritySa-Token1|1说说安全框架……
  • C' Chain Chain '念念不忘@有回音的双向链表
    0阅读 0条评论 个赞
    1.前言写过一篇与单链表相关的博文(https://blog.51cto.com/gkcode/5681771),实际应用中,双向循环链表的功能更强大。单链表中,查询一个已知结点的后驱结点的时间复杂……
  • 如何?NET核心Web APi类库内嵌运行?
    0阅读 0条评论 个赞
    话题我们知道在.NETFramework中可以嵌入运行WebAPi,那么在.NETCore(.NET6+称之为.NET)中如何内嵌运行WebApi呢,在实际项目中这种场景非常常见,那么我们本……
  • 尝试阅读和理解linux shell脚本
    0阅读 0条评论 个赞
    从头一二去阅读语法和命令说明,对于脚本小白来说比较枯燥,难以坚持,所以这里选择对一份完整的shell脚本代码来逐行逐段解读,希望可以一渡小白,帮助我们快速进入脚本的大门_。司机要开车了:#!/bin/……
  • NET通过代码部署多域Https(SSL)
    0阅读 0条评论 个赞
    在上一个文章中,传送门,给大家介绍了怎么在配置文件中使用Kestrel部署Https,正好今天有小伙伴稳问到:可以通过代码的方式实现Kestrel的Https的部署吗?答案是肯定的,我们这次……
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
  • Linux系统的docker部署 网络核心3.1
    0阅读 0条评论 个赞
    此篇文章演示基本的基于docker部署.netcore服务,linux系统腾讯云ubuntu,.netcore版本3.1。1.安装dockeraptinstalldocker.io2.拉取.ne……
  • 珊瑚海跨终端解决方案及移动端动态布局实践
    0阅读 0条评论 个赞
    目录1.背景和介绍1.1跨端动态化技术的现状和问题1.2珊瑚海介绍1.3与其他框架的对比1.4应用案例2.珊瑚海技术方案2.1整体设计2.2D2X2.3开发工具2.4移动端引擎2.5……
  • k8s网络持久存储的StorageClass(如何一步步实现动态持久存储)
    0阅读 0条评论 个赞
    StorageClass的作用:创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦。而且开发人员在申请PVC资源时,还不一定有匹配条件的……
  • SQL SERVER存储过程学习笔记
    6阅读 0条评论 个赞
    将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程的优点1.存储……
  • 漫谈考试成长的探索——考试策略
    6阅读 0条评论 个赞
    在《漫谈软件系统测试——问题解决》一文中,文章借鉴控制疫情的四大策略,总结了软件系统质量保障的四大策略。那么在日常工作中,我们应该如何理解测试策略呢?什么是测试策略?测试策略是描述软件开发周期的测试方……
  • 解决ShardingJdbc不支持复杂SQL问题的说明
    18阅读 0条评论 个赞
    背景介绍公司最近做分库分表业务,接入了ShardingJDBC,接入完成后,回归测试时发现好几个SQL执行报错,关键这几个表都还不是分片表。报错如下:这下糟了嘛。熟悉ShardingJDB……
  • Java中SPI原理简介
    0阅读 0条评论 个赞
    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的"开闭原则"。所以我们……
  • springboot集成了JSR303参数验证和全局异常处理
    0阅读 0条评论 个赞
    一、前言我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断,为了安全。因为前端很容易拜托,当测试使用……
  • spring MVC(II)——请求处理参数和响应数据处理
    0阅读 0条评论 个赞
    1、请求处理参数1.1请求参数@RequestParam1.1.1不使用@RequestParam注解请求参数处理,不使用参数注解:1.如果请求参数名和请求处理的形参名一致,springMv……
  • Java接口自动测试框架系列(1)自动测试框架
    0阅读 0条评论 个赞
    一、什么是自动化测试自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例一步步执行测试,得到实际结果与期望结果的比较。为了节省人力、……
  • 如何在分布式系统中实现对关键资源的互斥访问?
    0阅读 0条评论 个赞
    网络时代,购物、社交等之前只能在线下进行的活动,如今都可以在网络上完成。为了促进消费,电商网、网络店铺经常推出商品限定数量内的“秒杀”,“抢购”活动,类似的临界资源访问还有我们生活中常见的微信多人抢红……
  • 数据库发展史II-数据仓库
    6阅读 0条评论 个赞
    回顾数据仓库的发展历程,大致可以将其分为几个阶段:萌芽探索到全企业集成时代、企业数据集成时代、混乱时代--"数据仓库之父"间的论战、理论模型确认时代以及数据仓库产品百家争鸣时代。数据仓库理论发展历程上……
  • 如何在C#程序中注入恶意DLL?
    6阅读 0条评论 个赞
    一:背景前段时间在训练营上课的时候就有朋友提到一个问题,为什么Windbg附加到C#程序后,程序就处于中断状态了?它到底是如何实现的?其实简而言之就是线程的远程注入,这一篇就展开说一下。二:……
  • Linux驱动开发十六 输入系统33543 系统附带的输入驱动程序
    0阅读 0条评论 个赞
    前面两章我们通过input子系统构建了一个按键类型的输入设备的驱动,其实Linux的内核还提供了一套基于GPIO的按键驱动程序,和LED设备一样,我们只需要在编译内核的过程中进行配置然后在设备树中定义……
  • 拓扑岭CEO雷鹏:创业不只是技术
    0阅读 0条评论 个赞
    云计算的出现,加速了企业信息技术的发展。数据库是最常用的基础软件之一,它通常能提供计算和存储的能力。虽然分布式数据库也做到了很好的扩展性,但它不能算是「云原生」。「云原生数据库」的核心,是要设计一种更……
  • 高手面试一个人 问4个问题就够了
    0阅读 0条评论 个赞
    作者|Mr.K编辑|Emma来源|技术领导力(ID:jishulingdaoli)金九银十求职季又要来了。据统计,今年的应届毕业生已破千万,加上社会面存量人才,相信今年的人才季的热度,不会低于今年……
  • Python自学教程7:字典类型有什么用
    0阅读 0条评论 个赞
    字典是Python中的一个重要操作,如果字典玩得顺,很多其他的数据类型就可以一通百通。Python字典的定义字典使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分隔。键必须是不可变类型,……
  • 谈ASP.NET核心认证与授权
    0阅读 0条评论 个赞
    使用asp.netcore开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.netcore框架中的认证和授权的源码来分析……
  • Java开发学习(29)——Maven依赖转移、可选依赖和排除依赖分析
    0阅读 0条评论 个赞
    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用标签来进行jar包的引入即可。其实就是依赖……
  • 如何优雅地转换Bean对象
    0阅读 0条评论 个赞
    背景我们的故事要从一个风和日丽的下午开始说起!这天,外包韩在位置上写代码~外包韩根据如下定义PO(persistantobject):持久化对象,可以看成是与数据库中的表相映射的java对象。最……
最近发布资讯
更多