黑龙江东部、新疆阿勒泰山区等地部分地区仍有中到大雪
中新网11月23日电 据中央气象台网站消息,预计,未来两天,黑龙江东部、新疆阿勒泰山区、西藏东部...
在一些字典绑定中,往往为了方便展示详细数据,需要把一些结构树展现在树列表TreeList控件中或者下拉列表的树形控件TreeListLookUpEdit控件中,为了快速的处理数据的绑定操作,比较每次使用涉及太多细节的操作,我们可以把相关的数据绑定操作,放在一些辅助类的扩展函数中进行处理,这样可以更方便的,更简洁的处理数据绑定操作,本篇随笔介绍TreeList控件和TreeListLookUpEdit控件在扩展函数中的处理操作。
1、TreeList控件的绑定操作TreeList本身就是一个树形数据的展示控件,可以展示常规的二维表,也可以展示具有嵌套关系的二维表,数据源可以是多种方式的,支持Datable的数据源的嵌套展示。
单个列信息的树形列表展示界面效果:
(资料图片仅供参考)
类似GridView的嵌套列表展示的TreeList界面效果
这些界面都比较常见,也是我们经常碰到的处理效果,但是TreeList的界面设置有很多特性,如果每次拷贝这些代码,需要很多,也不便于维护,因此我们建立一些扩展函数来处理界面元素的绑定,就非常必要。
本篇随笔介绍基于TreeList和TreeListLookUpEdit控件的绑定即可。两个类型控件的数据源,都可以是DataTable类型,也可以是IList集合类型,如下所示是基于SQLSugar开发框架,返回的数据结构是IList类型的。
所以一般树形列表的绑定操作,提供一个方法来获取数据并绑定即可。
////// 绑定树的数据源 /// private async void BindTree() { var list = await BLLFactory.Instance.GetAllAsync(); this.tree.DataSource = list?.Items; this.tree.ExpandAll(); }
如果使用原生代码初始化树列表,那么代码如下所示。
//使用原生代码处理 //添加显示列 this.tree.Columns.Add(new TreeListColumn{ FieldName= "Id", Caption= "ID"});//增加一个隐藏的字段,存储需要的ID this.tree.Columns.Add(new TreeListColumn{ FieldName= "Name", Caption= "字典类型名称", Width=160, VisibleIndex =0}); //设置树控件的层次关系及属性 tree.KeyFieldName = "Id"; tree.ParentFieldName = "PID"; this.tree.OptionsBehavior.Editable = false; this.tree.OptionsView.ShowColumns = false; this.tree.OptionsView.ShowCheckBoxes = false; this.tree.OptionsView.EnableAppearanceOddRow = true; this.tree.OptionsView.EnableAppearanceEvenRow = true;
而实现查询过滤的操作,还需要另外处理代码,我们看看大概的代码如下。
////// 实现树节点的过滤查询 /// private void InitSearchControl() { this.searchControl1.Client = this.tree; this.tree.FilterNode += (object sender, FilterNodeEventArgs e) => { if (tree.DataSource == null) return; string nodeText = e.Node.GetDisplayText("Name");//参数填写FieldName if (string.IsNullOrWhiteSpace(nodeText)) return; bool isExist = nodeText.IndexOf(searchControl1.Text, StringComparison.OrdinalIgnoreCase) >= 0; if (isExist) { var node = e.Node.ParentNode; while (node != null) { if (!node.Visible) { node.Visible = true; node = node.ParentNode; } else break; } } e.Node.Visible = isExist; e.Handled = true; }; }
这些是比较常见的操作,我们把它封装为扩展函数,然后根据特性传入对应参数实现即可。
最后简单的三行代码来简单处理,可以达到同样的效果就可以了。
//控件扩展函数封装处理 this.tree.CreateColumn("Name", "字典类型名称", 160, true); this.tree.InitTree("Id", "PID", "-1", false, false); this.tree.InitSearchControl(this.searchControl1, "Name");
我们扩展方法放在一个单独的文件中,标注为静态类即可。
////// TreeList控件的扩展函数 /// public static class TreeList_Extension
其中提供几个对TreeList 常见的封装处理方法就可以了。
对于一些不常见的属性,我们保留它即可,如下界面代码是对TreeList绑定展示多个列的处理操作。
////// 初始化TreeList控件,展现嵌套的列表。/// private void InitControl(){ this.tree.Columns.Clear();//控件扩展函数封装处理 this.tree.CreateColumn("Name", "机构名称", 160, true); this.tree.CreateColumn("HandNo", "机构编码", 80, true); this.tree.CreateColumn("Category", "机构分类", 80, true); this.tree.CreateColumn("Address", "机构地址", 160, true); this.tree.CreateColumn("InnerPhone", "内线电话", 80, true); this.tree.CreateColumn("OuterPhone", "外线电话", 80, true); this.tree.CreateColumn("SortCode", "排序码", 80, true); this.tree.InitTree("Id", "PID", null, true, true); this.tree.OptionsView.RowImagesShowMode = RowImagesShowMode.InCell;//紧凑型图标 this.tree.ExpandAll(); // 列过滤处理 this.tree.OptionsView.ShowAutoFilterRow = true;//显示过滤行 this.tree.OptionsBehavior.EnableFiltering = true;//开启过滤功能 //初始化树节点选择事件 this.tree.FocusedNodeChanged += delegate (object sender, FocusedNodeChangedEventArgs e) { this.FocusedNodeChanged(); }; //树节点双击处理事件 this.tree.DoubleClick += (s, e) => { if (this.tree.FocusedNode != null) { string ID = string.Concat(this.tree.FocusedNode.GetValue("Id")); MessageDxUtil.ShowTips("Id=" + ID); } }; //编辑记录失去焦点后校验处理 this.tree.ValidateNode += (s, e) => { Console.WriteLine(this.tree.FocusedNode.GetValue("Name")); };}
实现类似GridView的嵌套列表展示的TreeList界面效果如下所示。
2、TreeListLookUpEdit控件绑定操作在一些参考的列表中,我们往往需要展示更丰富一点的列表内容,如下所示。
如果有嵌套列表的,展示嵌套列表的处理
对于下拉的树形列表,虽然这个控件比TreeList更复杂一些,它是下拉列表和TreeList的整合体,不过我们也可以用类似的扩展函数方法,来简单的实现数据的绑定展示。
如对于常规的数据绑定,我们大概的代码如下所示。
//TreeListLookupEdit数据绑定//this.txtProjectList3.Properties.TreeList.OptionsView.ShowCheckBoxes = true;this.txtProjectList3.Properties.DataSource = list;this.txtProjectList3.Properties.ValueMember = "Value";this.txtProjectList3.Properties.DisplayMember = "Text";this.txtProjectList3.Properties.TreeList.Columns.Clear();for (int i = 0; i < columns.Count; i++){ this.txtProjectList3.Properties.TreeList.CreateColumn(columns[i].FieldName, columns[i].Caption, columns[i].Width, true);}this.txtProjectList3.Properties.TreeList.InitTree(null, null, null, true, true);this.txtProjectList3.Properties.ImmediatePopup = true;this.txtProjectList3.Properties.TextEditStyle = TextEditStyles.Standard;this.txtProjectList3.Properties.PopupWidthMode = DevExpress.XtraEditors.PopupWidthMode.ContentWidth;this.txtProjectList3.Properties.PopupFormSize = new System.Drawing.Size(this.txtProjectList3.Width, 300);this.txtProjectList3.Properties.TreeList.IndicatorWidth = 40;this.txtProjectList3.Properties.TreeList.CustomDrawNodeIndicator += (s, ee) =>{ if (ee.IsNodeIndicator) { var index = ee.Node.TreeList.GetVisibleIndexByNode(ee.Node); ee.Info.DisplayText = (index + 1).ToString(); }};
对于常规的列表绑定,我们可以用简单的一个扩展函数实现,如下所示。
//常规类别绑定 this.txtProjectList4.BindDictItems(list, "Text", "Value", true, columns.ToArray());
就可以实现常规的界面效果处理。
对于树形列表,我们需要设置属性的ID和PID,以及一些显示的列属性,那么也可以增加更多的参数来实现。
var dictTypeColumns = new List(){ new LookUpColumnInfo("Id", "Id"), new LookUpColumnInfo("Name", "字典类别名称")};treeListLookUp.BindDictItems(result.Items, "Name", "Id", true, false, "Id", "PID", null, true, true, true, false, dictTypeColumns.ToArray());
因此嵌套列表就可以正常的展示出层次关系了
因此我们把扩展方法,放到静态类里面就可以了,方法封装如下所示
////// 绑定TreeListLookUpEdit控件的数据源(完整版) /// /// 控件对象 /// 数据源 /// 显示字段 /// 值字段 /// 是否显示序号 /// 是否显示复选框 /// 设置父子递归关系字段-子字段,不指定则使用valueMember /// 设置父子递归关系字段-父字段,不指定则不嵌套展示 /// 根节点的值 /// 树节点是否可以编辑 /// 是否显示列头 /// 是否奇偶行不同颜色 /// 是否运行拖动列 /// 显示的列 ///public static object BindDictItems(this TreeListLookUpEdit lookup, object dataSource, string displayMember, string valueMember, bool showRowIndicator = true, bool showCheckbox = false, string keyFieldName = null, string parentFieldName = null, string rootValue = null, bool editable = true, bool showColumnHeader = false, bool oddEvenRowColor = true, bool allowDrop = false, params LookUpColumnInfo[] lookUpColumnInfos) { lookup.Properties.DataSource = dataSource; lookup.Properties.DisplayMember = displayMember; lookup.Properties.ValueMember = valueMember; lookup.Properties.TreeList.OptionsView.ShowCheckBoxes = showCheckbox; lookup.Properties.TreeList.Columns.Clear(); for (int i = 0; i < lookUpColumnInfos.Length; i++) { lookup.Properties.TreeList.CreateColumn(lookUpColumnInfos[i].FieldName, lookUpColumnInfos[i].Caption, lookUpColumnInfos[i].Width, true); } //初始化树的样式和特性 //keyFieldName = !string.IsNullOrWhiteSpace(keyFieldName) ? keyFieldName : valueMember;//如果不指定,采用valueMember lookup.Properties.TreeList.InitTree(keyFieldName, parentFieldName, rootValue, editable, showColumnHeader, oddEvenRowColor, allowDrop); lookup.Properties.PopupFormSize = new System.Drawing.Size(lookup.Width, 300); lookup.Properties.ImmediatePopup = true; lookup.Properties.TextEditStyle = TextEditStyles.Standard; if (showRowIndicator) { lookup.Properties.TreeList.IndicatorWidth = 40; //重写序号显示,默认不显示数值 lookup.Properties.TreeList.CustomDrawNodeIndicator += (s, ee) => { if (ee.IsNodeIndicator) { var index = ee.Node.TreeList.GetVisibleIndexByNode(ee.Node); ee.Info.DisplayText = (index + 1).ToString(); } }; } return dataSource; }
通过扩展方法的方式,可以简化界面的处理代码,同时利于我们在项目开发的时候,快速的实现相关的效果,而不需要过多的中断查找相关的界面控件属性。
有几篇类似的文章,可供参考:
《在Winform开发中,我们使用的几种下拉列表展示字典数据的方式》
《在Winform开发框架中下拉列表绑定字典以及使用缓存提高界面显示速度》
《在各种开发项目中使用公用类库的扩展方法,通过上下文方式快速调用处理函数》
标签:
上一篇 : 三年来北京为3万余名务工人员追发工资5.11亿元
下一篇 : 最后一页
“最近经常能看见红袖箍的身影,检查楼内消防设施,检查充电车棚充电设备,特别有安全感。”“这种检查...
04-25 17:04:31
1、暖被窝:又叫暖床,古代较为富裕的家庭在冬天会有丫鬟给东家把被窝捂热,再让东家睡觉。2、在封建社会,
04-25 16:42:54
IT之家4月25日消息,踏上火星表面的第一个中国航天器——“祝融号”已经超期服役,从去年5月18日自主进...
04-25 16:29:45
在资本市场,有一个不能算是100%的定律、但是也算是经常出现的现象,就是只要是爆款、大卖的金融产品,就经
04-25 16:10:31
中新经纬4月25日电中国黄金协会最新统计数据显示,2023年一季度,随着疫情影响的进一步减弱,全国黄金企业
04-25 15:28:50
4月24日下午,山东省政府召开新闻发布会公布一季度经济社会运行情况,据通报,根据地区生产总值统一核算结
04-25 15:02:28
鲁中网淄博4月24日讯4月21日下午,桓台交警大队新城中队民警在原山大道巡逻,保障群众出行安全畅通。14时50
04-25 14:34:37
惠城家长,新生儿参保登记和缴费,在线就能办理!
04-25 14:07:10
1、《英雄联盟之最强套路王》是一部游戏类型网络小说,作者是子曰我不说。本文关于英雄联盟之最强套路王的
04-25 14:00:20
推出新批次特色产业园区,提供优质产业空间15平方公里
04-25 13:45:21
今天(24日)是第八个中国航天日,国家航天局和中国科学院今天上午联合发布了我国首次火星探测火星全球影像
04-25 13:28:23
良乡医院五一劳动节门急诊安排如下:✔急诊、发热门诊、肠道门诊24小时开诊。✔普通外科 骨科 胸心血管外科
04-25 12:57:51
在全球市值最大规模公司的排行榜上,LVMH正在逼近全球电动汽车领导者特斯拉(TSLA US),第九位的争夺已进入
04-25 12:23:12
2023年黑龙江初级护师考试成绩查询时间及方式由初级护师考试栏目提供,查找更多2023年黑龙江初级护师考试成
04-25 12:14:36
据中国驻日本大使馆微信公众号消息,近日,中国驻日本大使馆通过多渠道了解到,不法分子通过技术手段将电话
04-25 11:56:22
第一时间提供各大券商研究所报告,最大程度减少个人投资者与机构之间信息上的差异,使个人投资者更早的了解
04-25 12:00:33
长高电新:2022年营收12 23亿净利5805 06万2022年度,长高电新实现营业收入12 23亿元,同比下降19 62%,归
04-25 11:59:10
几位骨灰级猫奴,为新中产养猫人开了一家“山姆店”。“宠物用品市场高度分散,消费者想要买到合适的商...
04-25 11:38:21
前不久,江苏省科技厅公布了2022年“江苏省外国专家工作室”名单,其中,广陵经济开发区海沃机械(中国...
04-25 11:37:46
央视网消息:国新办4月24日举行发布会。国家知识产权局介绍,2022年我国知识产权创造质量稳步提升,知识产
04-25 11:33:43
观点网讯。4月24日消息,澳门三月游客达196万人次,同比增长271 4%,环比增长22 8%。据观点新媒体了解,日
04-25 11:36:11
关键词三国库处理在个税APP上查询退税进度时提示“国库处理中”,表示税务机关已审核通过,待国库按规定...
04-25 11:33:23
海外行业:重塑生产力-AIGC+办公专题报告。新闻资讯提供最新、最及时的新闻服务。包括:个股新闻、股票资
04-25 11:05:20
昌江乡村建筑改造设计竞赛开赛
04-25 10:47:55
1、它的主要药理作用是“益气固表”,可以“利水”,也可以“托毒生肌”。2、什么是“益气”呢?凡是中...
04-25 10:49:39
湖南省林学会秘书长廖德志率专家组一行6人实地调研邵阳县林下经济工作。
04-25 10:46:07
三湘印象:去年归母净利润约2995万元,土地储备仅剩两个项目
04-25 10:35:09
春耕备播忙,夏粮丰收基础实
04-25 10:51:50
中新社绍兴4月24日电(记者刘亮)第十八届中国会展经济国际合作论坛24日在浙江绍兴启幕。中国贸促会在论坛发
04-25 10:32:53
2023年4月24日,中国铁路郑州局集团有限公司郑州桥工段干部职工利用210分钟的施工“天窗”,成功对郑焦...
04-25 10:27:42
4月24日,消费者网、对外经济贸易大学消费者保护法研究中心、北京阳光消费大数据研究院等机构发布《直播带
04-25 10:17:59
据资源库不完全统计,2023年第一季度全球共有10家3D打印相关企业获得融资,融资总额达到14 16亿元。然而国
04-25 10:08:30
红网时刻新闻4月24日讯(记者龙琦通讯员钟花)4月24日,株洲市中心医院携手中车株洲电力机车研究所,举行时
04-25 10:03:21
目前,全区已引进西瓜红薯、无架豆、樱桃番茄、红香椿、无土草莓等20多个适应不同时令的种植瓜果蔬菜新品种
04-25 09:52:03
舜网山东频道是山东新闻权威发布平台,及时发布山东17地市新闻。
04-25 09:32:36
4月25日消息,北京首钢园·百度ApolloPark近日正式开园,百度Apollo携手百度地图、易车以及首钢园打造“AI
04-25 09:33:15
1、写竞聘演讲稿时要把握三个关键:一要心中有听众,二要心中不忘自己,三要充分显示人格魅力。2、2、心中
04-25 09:23:22
据最高人民检察院消息,台湾地区犯罪嫌疑人杨智渊涉嫌分裂国家罪一案,由浙江省温州市国家安全局侦查终结,
04-25 09:11:18
让阅读点亮中国!杭图举办世界读书日阅读盛典
04-25 09:17:05
知晓|7~17℃,“五一”在京游览等级景区需预约!北京196处道路新增669个探头!阶段性降低失业、工伤保...
04-25 09:13:26
昨天,我市举行“十项行动·科教兴市人才强市行动方案”新闻发布会,介绍我市实施科教兴市人才强市行动...
04-25 09:04:58
你来晚了,戳蓝字一键关注Kyle回复“晚安”,可以获得一条特别的推送微信又改版了,为了避免看不到文章...
04-25 08:55:42
机械工业出版社出版的新书《哲学之刀》和大家见面啦!本书是“日本经营之圣”稻盛和夫全部著作中的第二...
04-25 08:19:30
汽车现在已经越来越普及,基本上都快实现每家每户都有汽车了,那么汽车这么多的情况之下,我们在用车的过程
04-25 08:02:57
最佳答案要洗。可以先找双筷子将肠子翻出来,然后去除表面的脏东西,清洗后加点面粉和盐到盆里,再加少许水
04-25 07:28:31
暗恋过梅婷和胡静,被章子怡力挺,47岁的陈明昊走红并不是意外
04-25 07:24:47
铁拳7中基本上每一个角色都有非常多的服装,虽然很多角色之间的服装都有重复之嫌,不过那么多的服装还是非
04-25 06:50:38
现代传播集团,关于现代传播集团介绍这个很多人还不知道,我们一起来看看!1、现代传播创立于1993年。2、公
04-25 06:10:14
4月24日北向资金增持59 92万股柳钢股份。近5个交易日中,获北向资金减持的有2天,累计净减持99 45万股。近2
04-25 05:40:55
淮安蒲菜、洪泽湖大闸蟹、盱眙龙虾……这些在淮安、全省乃至全国都闻名遐迩的地理标志商标,淮安目前已...
04-25 05:15:15
“最近经常能看见红袖箍的身影,检查楼内消防设施,检查充电车棚充电设备,特别有安全感。”“这种检查...
2023-04-25
1、暖被窝:又叫暖床,古代较为富裕的家庭在冬天会有丫鬟给东家把被窝捂热,再让东家睡觉。2、在封建社会,
2023-04-25
IT之家4月25日消息,踏上火星表面的第一个中国航天器——“祝融号”已经超期服役,从去年5月18日自主进...
2023-04-25
在资本市场,有一个不能算是100%的定律、但是也算是经常出现的现象,就是只要是爆款、大卖的金融产品,就经
2023-04-25
中新经纬4月25日电中国黄金协会最新统计数据显示,2023年一季度,随着疫情影响的进一步减弱,全国黄金企业
2023-04-25
2022年度百亿私募榜单揭晓。私募排排网数据显示,在112家百亿私募中,有业绩展示的私募管理人为92家,去...
2022年第一季度全球玻璃纤维需求比2021第四季度增长了5 4%,与2021第一季度同期相比增长了16%。由于风...
2022年8月15日,A股上市公司思美传媒(代码:002712 SZ)发布2022年半年度业绩报告。2022年1月1日-2022年...
中新网西宁11月21日电 题:青海水润高原:从“大动脉”到“毛细血管”的精准管理 作者 谈林明...
中新网西宁11月21日电 (记者 张添福)青海省卫生健康委员会21日消息,该省第3例本土确诊病例经过20...
中新网11月23日电 据中央气象台网站消息,目前,本轮寒潮对中国的影响已经基本结束,预计未来三天...
中新网11月23日电 据中央气象台网站消息,预计,未来两天,黑龙江东部、新疆阿勒泰山区、西藏东部...
Copyright © 2015-2022 青年纤维网版权所有 备案号:皖ICP备2022009963号-20 联系邮箱:39 60 291 42@qq.com