Bootstrap Blazor实现多个Select选择器联合选择

        Bootstrap Blazor官方目前只提供单个Select选择器,如果要想实现下图所示的多个Select选择器联合选择,则需要通过编写自定义组件来实现。

        主要通过Bootstrap的data-bs-toggle属性来实现展开和折叠效果。

        .razor文件内容如下:

@typeparam TValue
@inherits SelectBase<TValue><div class="d-flex dropdown-select">@if (DItems is not null && DItems.Count > 0){@foreach (var dItem in DItems){@if (dItem.SItems != null && dItem.SItems.Count > 0){<div class="dropdown"><button class="@($"btn {(dItem.SItems.Where(t => t.Active).Count() > 0 ? "btn-primary" : "")} dropdown-toggle")" type="button" data-bs-toggle="dropdown" aria-expanded="false">@dItem.ParentItem.Text</button><ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">@foreach (var item in dItem.SItems){<li><label class="d-flex align-items-center"><input type="checkbox" @bind="@item.Active" @onclick="async() => { item.Active = !item.Active; await OnClink(dItem.ParentItem, item);}" />@item.Text</label></li>}</ul></div>}else{<div class="dropdown"><button class="@($"btn {(dItem.ParentItem.Active ? "btn-primary" : "")}")" type="button" @onclick="async () => { dItem.ParentItem.Active = !dItem.ParentItem.Active; await OnClink(dItem.ParentItem, null); }">@dItem.ParentItem.Text</button></div>}}}
</div>

        .razor.cs内容如下: 

using BootstrapBlazor.Components;
using Microsoft.AspNetCore.Components;
using System.Collections;
using System.Diagnostics.CodeAnalysis;namespace BlazorServerApp.Components.BsBlzExtends
{/// <summary>/// DropdownSelect组件/// </summary>/// <typeparam name="TValue">目前只支持string类型</typeparam>public partial class DropdownSelect<TValue>{[NotNull][Parameter]public List<DropdownSelectedItem> DItems { get; set; }[Parameter]public Func<IEnumerable<SelectedItem>, TValue, Task>? OnSelectedChanged { get; set; }private async Task OnClink(SelectedItem parentItem, SelectedItem item) => await OnSelectStateChanged(parentItem, item, item == null ? parentItem.Active : item.Active);private async Task OnSelectStateChanged(SelectedItem parentItem, SelectedItem item, bool v){try{var dItem = DItems.FirstOrDefault(d => d.ParentItem.Text == parentItem.Text);if (item != null){if (item.Text.Equals("全部") && v){dItem.SItems.ForEach(d => { d.Active = true; });}else if (item.Text.Equals("全部") && !v){dItem.SItems.ForEach(d => { d.Active = false; });}if (dItem.SItems.Where(d => d.Active == false && d.Text.Equals("全部") == false).Count() > 0){var all = dItem.SItems.FirstOrDefault(d => d.Text.Equals("全部"));all.Active = false;}else if (dItem.SItems.Where(d => d.Active == false && d.Text.Equals("全部") == false).Count() <= 0){var all = dItem.SItems.FirstOrDefault(d => d.Text.Equals("全部"));all.Active = true;}}if (ValueType == typeof(string)){var values = DItems.Select(d => {if ((d.SItems == null || d.SItems.Count <= 0)){if (d.ParentItem.Active){return d.ParentItem.Value;}else{return null;}}var vs = d.SItems.Where(t => t.Active && !string.IsNullOrEmpty(t.Value)).Select(t => t.Value).ToList();if (vs != null){var temp = string.Join(",", vs);return temp;}else{return null;}}).ToList();CurrentValueAsString = string.Join(",", values.Where(d => !string.IsNullOrEmpty(d)));}else if (ValueType.IsGenericType){var t = ValueType.GenericTypeArguments;if (Activator.CreateInstance(typeof(List<>).MakeGenericType(t)) is IList instance){foreach (var sl in dItem.SItems.Where(i => i.Active)){if (sl.Value.TryConvertTo(t[0], out var val)){instance.Add(val);}}CurrentValue = (TValue)instance;}}if (OnSelectedChanged != null){await OnSelectedChanged.Invoke(dItem.SItems, Value);}}catch{throw;}}}public class DropdownSelectedItem{[NotNull]public SelectedItem ParentItem { get; set; }public new List<SelectedItem> SItems { get; set; }}
}

        .razor.css内容如下: 

.dropdown-select {flex-wrap: wrap;
}.dropdown{margin-right: 0.1rem;
}input {margin-left: 0.3rem;margin-right: 0.3rem;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust语法基础

注释 所有的开发者都在努力使他们的代码容易理解,但有时需要额外的解释。在这种情况下,开发者在他们的源码中留下注释,编译器将会忽略掉这些内容,但阅读源码的人可能会发现有用。 和大多数的编程语言一样,主要有一下两种: 单行注释 // 多行注释 /* */ 基本数据类型 Ru…

【路径规划】蚁群算法的优化计算——旅行商问题(TSP)优化

摘要 旅行商问题&#xff08;TSP&#xff09;是一种经典的组合优化问题&#xff0c;其目标是找到一条遍历所有城市且总路程最短的环路。由于其计算复杂度高&#xff0c;求解大规模TSP问题往往依赖于启发式算法。本文研究了基于蚁群算法&#xff08;Ant Colony Optimization, A…

2024.10.19小米笔试题解

第一题数独计数 考虑dfs遍历所有情况 n = int(input())def check(grid, x, y, v):dx = [1, 0, -1, 0]dy = [0, 1, 0, -1]for i in range(4):nx, ny = x + dx[i], y + dy[i]if 0 <= nx < 3 and 0 <= ny < 3:if grid[nx][ny] == 0:continueif abs(grid[nx][ny] - v…

034_基于php万怡酒店管理系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

python之数据结构与算法(数据结构篇)-- 字典

一、字典的概念 这里我使用“小羊们”举例子&#xff0c;现在我需要去创建一个"羊村小羊们的身高"字典去保存小羊们的身高&#xff0c;对小羊们的身高进行查询、增加、删除、遍历等一系列操作。去更好的理解&#xff0c;字典是个什么东东&#xff01;&#xff01;&…

Java根据word 模板,生成自定义内容的word 文件

Java根据word 模板&#xff0c;生成自定义内容的word 文件 背景1 使用技术2 实现方法依赖啊 3 问题4 背景 主要是项目中需要定制化一个word&#xff0c;也就是有一部分是固定的&#xff0c;就是有一个底子&#xff0c;框架&#xff0c;里面的内容是需要填充的。然后填充的内容…

Qt中的Base64编码

Qt中的Base64编码 Qt之Base64编解码 Base64编码是一种用于表示二进制数据的文本编码方式&#xff0c;通常用于在需要通过文本传输二进制数据的场景中&#xff0c;比如在电子邮件和URL中传递数据。它将二进制数据转换为由64个ASCII字符组成的字符串&#xff0c;便于在文本环境中…

宝塔部署前后端分离若依项目--CentOS7版

准备&#xff1a; CentOS7服务器一台 通过网盘分享的文件&#xff1a;CentOS 7 h 链接: https://pan.baidu.com/s/17DF8eRSSDuj9VeqselGa_Q 提取码: s7x4 大家有需要可以下载这个&#xff0c;密码61 若依前端编译后文件 通过网盘分享的文件&#xff1a;ruoyi-admin.jar 链…

基于SSM网络在线考试系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;在线考试管理&#xff0c;试题管理&#xff0c;考试管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;在线考试&#xff0c;公告信…

MySQL 实现简单的性能优化

一&#xff1a;硬件优化 更高的网络带宽&#xff1a;在处理大规模的远程请求时可以提高MySQL服务器的响应速度&#xff1b; 更大的内存空间&#xff1a;有助于缓存更多的数据库数据&#xff0c;减少磁盘I/O操作&#xff0c;提高整体性能&#xff1b; 换用企业级SSD&#xff1…

题解:P11215 【MX-J8-T3】水星湖

好久没写题解了&#xff0c;交一发吧。 题目传送门 思路讲解 我们用一个结构体 struct 存储每一个格子的状态&#xff0c;tp 表示格子的类型&#xff0c;t 表示如果该格子种过树&#xff0c;种树的最近时间&#xff0c;die 表示如果该格子有树&#xff0c;这棵树会不会永远都…

Offset Explorer 连接kafka使用SASL 进行身份验证详解

使用 Offset Explorer&#xff08;也称为 Kafka Tool&#xff09;3.0.1 连接到 Kafka 并通过 SASL 进行身份验证&#xff0c;可以按照以下步骤进行配置&#xff1a; 1. 确保 Kafka 配置支持 SASL 首先&#xff0c;确保你的 Kafka 集群已配置为支持 SASL。你需要在 server.pro…

笔记:weblogic升级及版本信息

官方文档 Patch Set Update (PSU) Release Listing for Oracle WebLogic Server (WLS) (Doc ID 1470197.1) 版本信息 12.2.1.412.2.1.312.2.1.212.2.1.112.2.1.012.1.3.012.1.2.012.1.1.010.3.610.3.510.3.4

【小白学机器学习17】 概率论的认识论和方法论

目录 1 分析概率问题的思路&#xff1a;三段论逻辑 2 学习概率时的三段论推导 1 分析概率问题的思路&#xff1a;三段论逻辑 现在很多辩证法&#xff0c;从黑格尔这继承&#xff0c;却变成了2段论&#xff0c;感觉缺乏一个桥梁&#xff0c;逻辑上思考问题的链条变难了基于一…

用python-pptx轻松统一调整演示文档配色方案

哈喽,大家好,我是木头左! 安装与准备:python-pptx入门 确保你的Python环境中已经安装了python-pptx库。如果没有,可以通过pip进行快速安装: pip install python-pptx此外,对于PPT文档的操作,了解一些基本的PowerPoint概念是有帮助的,比如幻灯片母版(Slide Master)…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

印章图片怎么抠出透明背景?这4个一键抠图工具建议收藏!

在处理印章图片时&#xff0c;背景色的存在往往成为影响使用效果的一大障碍&#xff0c;特别是在需要将印章与不同背景融合时&#xff0c;不透明的背景色会显得尤为突兀。为了应对这一挑战&#xff0c;市场上涌现了一系列高效的一键抠图工具&#xff0c;它们能够迅速将印章图片…

Scala的继承

Scala中的继承是指在原有的类的基础上定义一个新类&#xff0c;原有的类称为父类&#xff0c;新类成为子类 例&#xff1a; class Animal(){var leg4def run():Unit{println("animal run.....")} } //继承&#xff1a;不劳而获 class Dog extends Animal(){} object…

ORB-SLAM2 ---- Frame中在主函数中被调用的函数

文章目录 一、Frame::isInFrustum1. 函数讲解2. 源码 二、Frame::GetFeaturesInArea1. 函数讲解2. 函数源码 三、Frame::ComputeBoW1. 函数讲解2. 函数源码 四、Frame::UnprojectStereo1. 函数讲解2. 函数源码 五、总结 一、Frame::isInFrustum 1. 函数讲解 此函数判断地图点…

【Linux】进程池

目录 进程池 进程池的概念&#xff1a; 手搓进程池&#xff1a; 1、创建信道和子进程 2、通过channel控制子进程 3、回收管道和子进程 进程池 进程池的概念&#xff1a; 定义一个池子&#xff0c;在里面放上固定数量的进程&#xff0c;有需求来了&#xff0c;就拿一个池中…