游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

BootstrapBlazor实战Tree树形控件使用(2)

  继续上篇实战BootstrapBlazor树型控件Tree内容,本篇主要讲解整合Freesqlorm快速制作数据库后台维护页面
  demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySqlSqlServerPostgreSQLOracleSqliteFirebird达梦神通人大金仓翰高华为GaussDBMsAccess1。Freesql处理树形分类
  无限级分类(父子)是一种比较常用的表设计,我们直接设计表中包含parentid字段,然后递归查询,fsql内置了方法让使用透明化。1。1父子导航属性
  FreeSql导航属性之中,有针对父子关系的设置方式,如下:publicclassArea{〔Column(IsPrimarytrue)〕publicstringCode{get;set;}publicstringName{get;set;}publicstringParentCode{get;set;}〔Navigate(nameof(ParentCode))〕publicAreaParent{get;set;}〔Navigate(nameof(ParentCode))〕publicListChilds{get;set;}}
  定义Parent属性,在表达式中可以这样:fsql。Select()。Where(aa。Parent。Parent。Parent。Name中国)。First();
  定义Childs属性,在表达式中可以这样(子查询):fsql。Select()。Where(aa。Childs。AsSelect()。Any(cc。Name北京))。First();
  定义Childs属性,还可以使用【级联保存】、【贪婪加载】等等操作。fsql。Delete()。Where(11)。ExecuteAffrows();varrepofsql。GetRepository();repo。DbContextOptions。EnableAddOrUpdateNavigateListtrue;repo。DbContextOptions。NoneParametertrue;repo。Insert(newArea{Code100000,Name中国,ChildsnewList(new〔〕{newArea{Code110000,Name北京,ChildsnewList(new〔〕{newArea{Code110100,Name北京市},newArea{Code110101,Name东城区},})}})});1。2ToTreeList
  配置好父子属性之后,就可以这样用了:vart1fsql。Select()。ToTreeList();Assert。Single(t1);Assert。Equal(100000,t1〔0〕。Code);Assert。Single(t1〔0〕。Childs);Assert。Equal(110000,t1〔0〕。Childs〔0〕。Code);Assert。Equal(2,t1〔0〕。Childs〔0〕。Childs。Count);Assert。Equal(110100,t1〔0〕。Childs〔0〕。Childs〔0〕。Code);Assert。Equal(110101,t1〔0〕。Childs〔0〕。Childs〔1〕。Code);
  查询数据本来是平面的,ToTreeList方法将返回的平面数据在内存中加工为树型List返回。1。3AsTreeCte递归删除
  很常见的无限级分类表功能,删除树节点时,把子节点也处理一下。fsql。Select()。Where(aa。Name中国)。AsTreeCte()。ToDelete()。ExecuteAffrows();删除中国下的所有记录
  如果软删除:fsql。Select()。Where(aa。Name中国)。AsTreeCte()。ToUpdate()。Set(aa。IsDeleted,true)。ExecuteAffrows();软删除中国下的所有记录1。4AsTreeCte递归查询
  若不做数据冗余的无限级分类表设计,递归查询少不了,AsTreeCte正是解决递归查询的封装,方法参数说明:
  参数
  描述
  (可选)pathSelector
  路径内容选择,可以设置查询返回:中国北京东城区
  (可选)up
  false(默认):由父级向子级的递归查询,true:由子级向父级的递归查询
  (可选)pathSeparator
  设置pathSelector的连接符,默认:
  (可选)level
  设置递归层级
  通过测试的数据库:MySql8。0、SqlServer、PostgreSQL、Oracle、Sqlite、Firebird、达梦、人大金仓、南大通用、翰高
  姿势一:AsTreeCte()ToTreeListvart2fsql。Select()。Where(aa。Name中国)。AsTreeCte()查询中国下的所有记录。OrderBy(aa。Code)。ToTreeList();非必须,也可以使用ToList(见姿势二)Assert。Single(t2);Assert。Equal(100000,t2〔0〕。Code);Assert。Single(t2〔0〕。Childs);Assert。Equal(110000,t2〔0〕。Childs〔0〕。Code);Assert。Equal(2,t2〔0〕。Childs〔0〕。Childs。Count);Assert。Equal(110100,t2〔0〕。Childs〔0〕。Childs〔0〕。Code);Assert。Equal(110101,t2〔0〕。Childs〔0〕。Childs〔1〕。Code);WITHastreecteas(SELECT0asctelevel,a。Code,a。Name,a。ParentCodeFROMAreaaWHERE(a。Name中国)unionallSELECTwct1。ctelevel1asctelevel,wct2。Code,wct2。Name,wct2。ParentCodeFROMastreectewct1INNERJOINAreawct2ONwct2。ParentCodewct1。Code)SELECTa。Code,a。Name,a。ParentCodeFROMastreecteaORDERBYa。Code
  姿势二:AsTreeCte()ToListvart3fsql。Select()。Where(aa。Name中国)。AsTreeCte()。OrderBy(aa。Code)。ToList();Assert。Equal(4,t3。Count);Assert。Equal(100000,t3〔0〕。Code);Assert。Equal(110000,t3〔1〕。Code);Assert。Equal(110100,t3〔2〕。Code);Assert。Equal(110101,t3〔3〕。Code);执行的SQL与姿势一相同
  姿势三:AsTreeCte(pathSelector)ToList
  设置pathSelector参数后,如何返回隐藏字段?vart4fsql。Select()。Where(aa。Name中国)。AsTreeCte(aa。Name〔a。Code〕)。OrderBy(aa。Code)。ToList(anew{itema,levelConvert。ToInt32(a。ctelevel),patha。ctepath});Assert。Equal(4,t4。Count);Assert。Equal(100000,t4〔0〕。item。Code);Assert。Equal(110000,t4〔1〕。item。Code);Assert。Equal(110100,t4〔2〕。item。Code);Assert。Equal(110101,t4〔3〕。item。Code);Assert。Equal(中国〔100000〕,t4〔0〕。path);Assert。Equal(中国〔100000〕北京〔110000〕,t4〔1〕。path);Assert。Equal(中国〔100000〕北京〔110000〕北京市〔110100〕,t4〔2〕。path);Assert。Equal(中国〔100000〕北京〔110000〕东城区〔110101〕,t4〔3〕。path);WITHastreecteas(SELECT0asctelevel,a。Name〔a。Code〕asctepath,a。Code,a。Name,a。ParentCodeFROMAreaaWHERE(a。Name中国)unionallSELECTwct1。ctelevel1asctelevel,wct1。ctepathwct2。Name〔wct2。Code〕asctepath,wct2。Code,wct2。Name,wct2。ParentCodeFROMastreectewct1INNERJOINAreawct2ONwct2。ParentCodewct1。Code)SELECTa。Codeas1,a。Nameas2,a。ParentCodeas5,a。ctelevelas6,a。ctepathas7FROMastreecteaORDERBYa。Code
  更多姿势。。。请根据代码注释进行尝试https:github。comdotnetcoreFreeSqlwikiE69FA5E8AFA2E788B6E5AD90E585B3E7B3BB2。数据实体类
  新建文件ModelTreeDataFsqlFoo。cs
  其中GetTreeList()为获取常规List形式,GetTreeItems()是转换为BootstrapBlazor使用的TreeItem格式。usingBootstrapBlazor。Components;usingFreeSql。DataAnnotations;namespaceb05tree;summary无限级分类(父子)是一种比较常用的表设计,表设计中只有parentid字段summarypublicclassTreeDataFsqlFoo{https:github。comdotnetcoreFreeSqlwikiE69FA5E8AFA2E788B6E5AD90E585B3E7B3BB〔Column(IsPrimarytrue,StringLength6)〕publicstringCode{get;set;}〔Column(StringLength20,IsNullablefalse)〕publicstringName{get;set;}〔Column(StringLength6)〕publicstringParentCode{get;set;}〔Navigate(nameof(ParentCode))〕publicTreeDataFsqlFooParent{get;set;}〔Navigate(nameof(ParentCode))〕publicListTreeDataFsqlFooChilds{get;set;}publicstaticvoidDemoDatas(IFreeSqlfsql){varresfsql!。SelectTreeDataFsqlFoo()。Count();if(res0){vardistrictsnewTreeDataFsqlFoo{Code001,Name001系统管理,ChildsnewListTreeDataFsqlFoo(new〔〕{newTreeDataFsqlFoo{Code00101,Name00101基础数据管理,ChildsnewListTreeDataFsqlFoo(new〔〕{newTreeDataFsqlFoo{Code0010101,Name0010101教师},newTreeDataFsqlFoo{Code0010102,Name0010102职工}})},newTreeDataFsqlFoo{Code00102,Name00102餐厅数据管理,ChildsnewListTreeDataFsqlFoo(new〔〕{newTreeDataFsqlFoo{Code0010201,Name0010201厨师},newTreeDataFsqlFoo{Code0010202,Name0010202服务员}})}})};varlazyItemsnewListTreeDataFsqlFoo(new〔〕{districts,newTreeDataFsqlFoo{Code00103,Name00103懒加载演示},newTreeDataFsqlFoo{Code00104,Name00104懒加载延时演示}});varrepofsql。GetRepositoryTreeDataFsqlFoo();仓库类repo。DbContextOptions。EnableAddOrUpdateNavigateListtrue;开启一对多,多对多级联保存功能repo。Insert(lazyItems);}}publicstaticListTreeDataFsqlFooGetTreeList(IFreeSqlfsql){DemoDatas(fsql);returnfsql。SelectTreeDataFsqlFoo()。LeftJoin(dd。ParentCoded。Parent。Code)。ToList();}publicstaticListTreeItemGetTreeItems(IFreeSqlfsql){DemoDatas(fsql);varitemsfsql。SelectTreeDataFsqlFoo()。LeftJoin(dd。ParentCoded。Parent。Code)。ToList(anewTreeItem(){Texta。Name,Ida。Code,ParentIda。ParentCode});算法获取属性结构数据returnitems。CascadingTree()。ToList();}}3。Razor页面
  新建文件PagesTreeFsql。razor
  上半部分是Tree控件,下半部分是BootstrapBlazor的Table组件,用于维护后台数据pagetreefsqlusingb05tree。Datah3Tree树形控件Freesqlh3p通过设置节点codeHasChildNode控制是否显示节点小箭头图片。通过Tree的OnExpandNode委托添加节点code4。后置代码C
  新建文件PagesTreeFsql。razor。csusingBootstrapBlazor。Components;usingMicrosoft。AspNetCore。Components;namespaceb05tree。Pages;summarysummarypublicsealedpartialclassTreeFsql{〔Inject〕IFreeSql?fsql{get;set;}privateListTreeItemGetLazyItems(){varretTreeDataFsqlFoo。GetTreeItems(fsql);ret〔1〕。Text懒加载;ret〔1〕。HasChildNodetrue;ret〔2〕。Text懒加载延时;ret〔2〕。HasChildNodetrue;ret〔2〕。KeyDelay;returnret;}privateTaskOnTreeItemClick(TreeItemitem){Trace。Log(34;TreeItem:{item。Text}clicked);returnTask。CompletedTask;}privateTaskOnTreeItemChecked(TreeItemitem){varstateitem。Checked?选中:未选中;TraceChecked。Log(34;TreeItem:{item。Text}{state});returnTask。CompletedTask;}privatestaticasyncTaskOnExpandNode(TreeItemitem){if(!item。Items。Any()item。HasChildNode!item。ShowLoading){item。ShowLoadingtrue;if(item。Key?。ToString()Delay){awaitTask。Delay(800);}item。Items。AddRange(newTreeItem〔〕{newTreeItem(){Text懒加载子节点1,HasChildNodetrue},newTreeItem(){Text懒加载延时子节点2,HasChildNodetrue,KeyDelay},newTreeItem(){Text懒加载子节点3}});item。ShowLoadingfalse;}}privateTaskOnTreeItemChecked(ListTreeItemitems){TraceCheckedItems。Log(34;当前共选中{items。Count}项);returnTask。CompletedTask;}}5。添加Menu链接
  添加代码到SharedNavMenu。razorNavLinkclassnavlinkhreftreefsqlspanclassoioiplusariahiddentruespanTreeFsqlNavLink6。运行调试
  更改和删除后,刷新页面马上可以看到效果。
  项目源码
  Blazor100:Blazor入门100天
  知识共享许可协议
  本作品采用知识共享署名非商业性使用相同方式共享4。0国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow,不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。AlexChow
  今日头条博客园知乎GiteeGitHub

CCTV5直播!CBA总决赛预演辽粤大战,广东有望击败辽宁取北京时间1月1日,CBA常规赛继续进行,今天晚上迎来元旦大战重头戏,卫冕冠军广东男篮对阵辽宁男篮,CCTV5直播这场比赛。广东男篮上一场比赛对阵CBA巨人杀手吉林男篮,比赛一开……日常养生小妙招花最少的钱保护我们最重要的身体吃完午饭后睡10分钟,胜过剧烈运动,帮助消化,增强记忆力,防止午饭变成脂肪。口腔健康是身体健康的缩影,要想身体健康,最好是做到饭后漱口,早晚刷牙,使口气清新,牙齿健康。……长相贵气的5位男演员,反正尊龙我是真的服所谓演员,就是脱离演员本身,去演绎一个完全不同的人。但是有些演员好像就是很特定的形象,好多网友调侃他们长得就很有钱,就算是演穷人也是亿万富翁的样子。今天我们来看看那……寒冬手脚冰凉千万别不当回事冬天一到很多人腿脚发凉的毛病又犯了令人发愁的是即使穿了很多衣服也没有得到改善医生说寒冬时节腿脚冰凉可千万别不当回事!经常有人出现……坠落在地球上的天外来客,带来了有关生命的线索2021年2月28日晚10点左右,一颗火球在英格兰上空划过。超过千人看到了这颗炽热的天外访客,许多追踪摄像机以及民用监控设备都拍摄了它的降落过程。第二天早上的新闻开始提醒……如何看待iPhone13Pro的DXO相机评分为137分,仅9月28日,著名相机评测机构DXO公布了苹果最新手机iphone13pro的相机得分,为137分,目前在DXO榜单上仅排名第四。目前DXO相机评分排名第一的是华为P50P……关于新生儿打维生素K1的疑问看到一段宝妈发的宝宝因为出生没打维生素K1导致颅内出血,造成脑损伤的视频评论区各有说法,大部分护士表示所在医院新生儿出生后常规注射维生素K1并要求满月后注射第二针。但是大……穆里尼奥在罗马的这一年时隔五年,穆里尼奥再次赢得冠军,将自己职业生涯的冠军数量由25个更新为26个,成为以教练身份获得欧洲新三大杯的第一人。穆里尼奥也成为特拉帕托尼之后,第二位拿下五座欧洲三大杯奖杯……陈创近照,头发花白太苍老!他有个特别漂亮的前妻,长得优雅动人陈创近照,49岁文艺范儿十足,头发花白太苍老!他晒出的有两组照片。其中一组是剧照,另一组貌似是旅行照片。剧照中的两张,一张是生活照,另一张是定妆。生活照……你快乐吗?你快乐吗?我们会经常这样问自己吗?为什么会有这样的疑问?我想,应该是不快乐所以才会问的。或者说,我们不知道快乐的标准是什么?一千个人有一千个哈姆雷特。随着年岁渐长,思考人……本土品牌如何打造爆款手袋?在一直由西方传统品牌主导的市场中,中国本土ItBags正在崛起。图片来源:Shutterstock说到ItBags(爆款手袋),中国品牌一般不是消费者脑海里所闪过的……2022年幽默风趣富有哲理的金句(136)1。跌倒了,顺手在地上抓一把沙子,这就叫收获。2。能说服一个人的,从来不是道理,而是南墙;能让一个人闭嘴的,不是道理,而是身份。3。为什么说愿天下有情人终成眷属是一……
国乒参赛名单令人意外!樊振东陈梦都被雪藏,日本队主力参赛争冠在历经了4月没有赛事,5月仅有WTT美国两站最低级别的支线赛的赛事荒之后,6月份开始,国际乒联WTT旗下的各类赛事又将逐渐恢复举办了。樊振东首先就是WTT常规赛萨格……你们拿到驾照后还跟教练有联系吗?你这个问题,勾起了我一些不太美好的回忆。那是2013年,我学车时,教练很暴躁,总是大声斥责我们,粗野的脏话脱口而出,实话说我很愤怒。我就是不会开车交钱来学了,我要是会,找你干啥……大部分普通人一年都开车跑不了多少里程?为什么如此在乎油耗?因为大部分人都是买车装逼用的。一年行驶里程低于三万公里的,属于实际使用价值不大。买完车,成天关注油耗油价,舍不得交停车费的属于装逼的。你这个问题问的特别好,特……各位凯迪拉克老车主,你们的下一辆车还会考虑凯迪拉克吗?第一辆车atsl标配,现在ct6豪华运动。还是喜欢这个品牌的设计,自己之前就是做车的,还是认可凯迪拉克的性价比,配置都是为自己服务的,至于保值率那不是我考虑的事情不会。……考驾照哪个科目最难过?为什么?科目二吧当年兴高采烈报了驾校,科目二的项目练了又练,就是不会看后视镜,就是找不到教练所说的那个点(我高度近视),然后被教练骂得受不了了,直接退钱不考了我奇葩,我知道……2022年唯美语录大合集1、弹指流年,歌声悠悠,一缕荷香,一生眷恋。2、羞涩之花在一片单纯且美的心壤上摇曳,羞涩之美是女孩自然感情的流露美。3、真正的爱情永远不会变老。4、心,在这一……美国的机动车有没有年检的要求?美国有年检,如果你看美国车的后牌照上,都有一个小方牌贴在牌照上,上边有2017年这样的标记,说明年检了。但是,美国年检很简单,网上预约,到时过去只有一项检查,就是测尾气是否超标……抛开民族情绪不谈,比亚迪会超过特斯拉吗?谢谢邀请,只要所有人都坚持支持国产,就一定能超越,都是通过不断的试验积累也能获得发展的经验,依照中国人的勤劳与智慧,我们的未来可期,比亚迪的未来更可期。反观世界任何一个经……熬夜的人容易缺乏这种维生素,一定要及时补充!几类食物要常吃熬夜是生活中再普遍不过的一件事,每个人都知道熬夜伤身体,但您知道熬夜还会使维生素缺乏吗?熬夜多的人,记得补充这类维生素B族维生素能够营养神经,使人的神经肌肉维持正常……为什么高速很多车开得慢却在快车道行驶,给信号还不让道?很多人问类似问题,但自己却没注意高速上的车道规划,目前,很多高速并没有快车道,而是分小型车道、大型车道,在这种高速路上,前车没有给后车让路的义务,想超车就借道超,不要抱怨别人慢……人民网新华网关注乌达区!草木蔓发,春日渐暖,成百上千的红嘴鸥在巴音赛河河面上嬉戏翱翔、盘旋荡漾。随着乌达区生态环境的逐步改善,巴音赛河已成为红嘴鸥所眷恋的理想栖息地,每年都会有红嘴鸥飞抵巴音赛河。……深圳公安局交通警察局倡导大型车辆遇斑马线提前2米停让,这种做大赞并强烈支持!深圳交警一贯敢为人先,有很多首创性的做法。比如潮汐车道的使用,极大地缓解了交通高峰期繁忙路段的车辆拥堵状况,还有香梅深南路口,逆向交叉转弯车道,看上去复杂,但习……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网