界面组件Telerik ASP.NET MVC使用指南 - 如何自定义网格过滤

news2024/11/24 15:31:56

Telerik UI for ASP. NET MVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验。它主要是针对专业级的 ASP.NET开发,通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛的响应式应用程序。

在上文中(点击这里回顾>>),我们讲解了如何实现自定义网格过滤功能的第一步,本文将继续讲解如何配置过滤等。

获取Telerik UI for ASP. NET MVC R1 2023下载(Q技术交流:726377843)

配置过滤

如果自定义筛选的第一步是添加可筛选元素,那么第二步是在模式部分中指定数据类型。

由于在模式部分中将LastDelivery属性声明为日期,Grid在LastDelivery列上提供了一个日历控件,让用户选择要筛选的数据。类似地,通过将InStock属性声明为布尔值,用户可以在InStock列的顶部获得两个单选按钮,用于筛选行。最后TotalQuantity被标记为一个数字,该列得到一个用于选择数值的微调器。

由于模式设置,没格列上选择比较操作符的筛选菜单都配置为匹配列显示的属性的数据类型:

认情况下,网格在服务器上进行所有过滤。如果想确保你的用户总是在查看最新的数据,或者如果想利用服务器上更快的处理速度,这是非常好的选择。但在本示例中,是在初始获取之后缓存数据,并且只有少量产品要显示,所以不需要服务器端过滤的额外功能。

因此在本示例中,关闭服务器端过滤(除了初始数据获取)并在用户过滤网格行时消除对服务器的重复访问是有意义的。这不仅会给用户更好/更快的体验,还会减少对服务器端资源的需求。要实现客户端过滤,只需要将server-operation属性添加到网格的数据源标记中,并将其设置为false:

<datasource type="DataSourceTagHelperType.Ajax" server-operation="false">

关注用户需求

通常,用户想要做的只是找到其列与特定值匹配的行(对于包含字符串值的列尤其如此),如果是这样的话,这个UI可能更有意义:

实现这个过滤UI只需要两个步骤,首先需要更新网格上的可过滤元素,使用菜单(而不是行)过滤:

<filterable enabled="true" mode="menu">

其次,需要在希望提供这种简化体验的地方展开列元素,并为这些列提供它们自己的可过滤元素。在这些列的可过滤元素中,只需要将可过滤元素的multi属性设置为true,就像这样:

<column field="ProductName" title="Name" width="240">
<filterable multi="true"/>
</column>

现在,对于包含字符串数据的大多数列,您可能已经为用户提供了他们想要的筛选体验。这确实假设列具有合理数量的惟一值,因此选项列表本身不会过多。对布尔列进行这种更改也是一个很好的选择,用户最多只能在三个值(true, false,“is empty”)之间进行选择,并且永远不会有太多的选项列表。

处理日期和数字

然而对于日期和数字列,用户可能需要更多选项——他们不仅希望通过精确匹配进行筛选,还希望对日期在某个特定日期之前或之后的行进行筛选,或者对大于或小于某个值的数字进行筛选。

您可以配置Grid来提供这种体验,这可能更符合用户的需求:

要做到这一点,只需要将网格的可过滤元素的额外属性设置为false:

<filterable enabled="true" extra="false"/>

如果全局地这样有点极端,那么您可以使用每个列的可过滤元素单独配置列。例如,这个配置将单独为LastDelivery列打开完整的默认过滤选项:

<column field="LastDelivery" format="{0:MMM-dd}" title="Last Delivery" width="150" >
<filterable enabled="true" extra="true"/>
</column>

不过,在集中过滤和完整过滤体验之间有一个中间地带:通过使用operators元素,您可以为用户提供他们需要的比较操作符(还可以配置每个操作符显示的文本)。

这个示例定义了LastDelivery date列有三个比较运算符——“delivery on”(等于),“delivery before”(小于)和“delivery after”(大于):

<column field="LastDelivery" format="{0:MMM-dd}" title="Last Delivery" width="150" >
<filterable extra="false" >
<operators>
<date eq="Deliveries on"
gt="Deliveries after"
lt="Deliveries before" />
</operators>
</filterable>
</column>

现在用户得到了一组反映他们需求的过滤选项:

您还可以使用Grid的可过滤元素替代列可过滤元素来全局配置比较操作符,例如这将允许为所有日期列配置比较操作符,还可以使用operators元素中的相应元素为字符串、数字和枚举配置比较操作符。然后,您可以使用列的可过滤元素在必要时覆盖各个列上的这些设置。

配置选项列表

还有一个步骤可以为用户提供更集中的体验:您可以提供一个自定义的选项列表供用户进行比较,例如在Total Quantity列中,用户可能只对手头数量(QoH)与特定阈值进行比较感兴趣,典型的问题可能是这样的:“QoH是大于/小于0、100还是200项?”

提供比较值列表的第一步是向列的可过滤元素添加filter-ui-handler属性,此属性需要指向页面中的一个JavaScript函数,该函数将用值加载过滤器的选项列表。

在本示例中除了指定用户需要的两个比较操作符外,还引用了一个名为quantityOptions的函数,该函数将构建QoH阈值列表:

<column field="TotalQuantity" title="Quantity on Hand" width="150">
<filterable enabled="true" extra="false" filter-ui-handler="quantityOptions">
<operators>
<number gt="QoH greater than"
lt="Qoh less than" />
</operators>
</filterable>
</column>

下一步是编写该函数,该函数需要接受一个参数(我将其称为columnFilter),并且已经向该参数添加了一个Kendo UI下拉列表。在该下拉列表的传输部分,设置了一个读取操作,这次指向Razor Page中名为“Quantity”的处理程序方法。最后,使用下拉列表的optionLabel,已经指定了一个要在下拉列表中显示的初始选择:

function quantityOptions(columnFilter) {
columnFilter.kendoDropDownList({
dataSource: {
transport: {
read: "@Url.Page("/Index","Quantity")"
}
},
optionLabel: "-- Select Threshold --"
});
}

最后一步是在Razor Page的代码隐藏文件中创建相应的方法。下拉列表只发出GET请求,所以需要设置一个名为“OnGet”+处理程序名称(“OnGetQuantity”)的方法。在该方法中,只需要返回一个JSON格式的值列表来填充下拉列表,代码看起来像这样:

public JsonResult OnGetQuantity([DataSourceRequest] DataSourceRequest request)
{
List<int> qtys = new List<int> {0, 100, 200 };
return new JsonResult(qtys.Select(e => e).Distinct());
}

现在用户得到了这个非常自定义化的(和集中的)UI,用于根据手头的数量过滤产品:

 

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

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

相关文章

消息队列面试题-RocketMQ

1.为什么要使用消息队列&#xff1f; 2.消息队列有什么优点和缺点&#xff1f; 3.如何解决重复消费&#xff1f; 幂等性&#xff1a; 概念&#xff1a;一次和多次请求某一个资源对于资源本身应该具有同样的结果&#xff08;网络超时等问题除外&#xff09;。也就是说&#xf…

前端项目-09-购物车-游客列表-变更选中状态-删除

目录 1-加入购物车成功 2-购物车成功页面跳转 3-游客身份获取购物车列表 4-动态渲染购物车列表 5-处理商品数量 6-删除购物车商品 6.1-删除购物车单个商品 6.2-删除全部选中商品 7-修改产品状态 7.1-修改单个产品的状态​编辑 7.2-修改多个产品的状态 1-加入购物车成功…

【2023】分享一份网友的Linux运维面试题

原只有问题&#xff0c;没有答案。答案是我整理的&#xff0c;如发现有什么问题可以在评论区留言告诉我&#xff01;目录1.grep如何查找一个字符串如何忽略大小写2.kill -9和kill -15有什么区别3.简单描述一下TCP的建立和断开4.Linux服务在什么情况下CPU使用率会超过100%5.服务…

【机器学习(四)】基于KNN算法对鸢尾花类别进行分类预测

文章目录专栏导读1、KNN算法原理2、实战案例-对鸢尾花类别分类预测2.1确定特征和类别2.2对特征进行处理2.3对模型调参&#xff0c;选择最优参数2.4使用分类模型进行预测2.5评估模型&#xff0c;检验模型效果3、完整代码及结果专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c…

nginx-代理多个服务

目录 1.主机多Ip 1.1单网卡多ip主机配置 1.2修改default.conf 1.3server1.conf 1.3server2.conf 1.4测试文件 1.4重启测试 2.主机多端口 2.1server1.conf 2.2server2.conf 3.多域名代理 3.1server1.conf 3.2server2.conf 1.主机多Ip 1.1单网卡多ip主机配置 # 查看…

echart图表渲染合并策略

目录 调用方式 notMerge 普通合并 规则 例子 替换合并 规则 例子 echarts渲染函数setOption 调用方式 chart.setOption(option, {notMerge: boolean;replaceMerge?: string | string[];lazyUpdate: boolean; }); notMerge false &#xff08;默认&#xff09; 如果…

【Unity URP】2种描边方案:模板测试和正面剔除

写在前面 风格化不像PBR&#xff0c;好像没有套路可言&#xff0c;&#xff0c;&#xff0c;简直是《怎么好看怎么来》的最大化实践了&#xff01;感觉出的PBRNPR也是为了更好地利用PBR资产才诞生的这样一个渲染方案。&#xff08;当然我的评价非常非常的片面&#xff0c;瞎说…

帆软FineReport学习篇(四)——父子格设置

帆软FineReport学习篇(四)——父子格设置 1.概念 子单元格设置父单元格后,子单元格随父单元格进行扩展 简易的说,子单元格根据父单元格分组显示2 对比示意图 2.1 左父格对比示意图 2.2 上父格对比示意图 3 制作分组报表 3.1 新建普通报表WorkBook2.cpt 3.1.1 点击文件➡点…

OldWang带你了解MySQL(六)

文章目录&#x1f525;SQL函数&#x1f525;单行函数&#x1f525;字符函数&#x1f525;数字函数&#x1f525;日期函数&#x1f525;转换函数&#x1f525;通用函数&#x1f525;SQL函数 函数介绍 函数是 SQL 的一个非常强有力的特性&#xff0c;函数能够用于下面的目的&a…

【 SpringBoot ⽇志⽂件 】

文章目录一、⽇志的作用二、认识⽇志三、⾃定义⽇志打印3.1 在程序中得到⽇志对象3.2 使⽤⽇志对象打印⽇志3.3 ⽇志格式说明四、⽇志级别4.1 ⽇志级别的作用4.2 ⽇志级别的分类与使⽤4.2.1 ⽇志级别的分类4.2.2 ⽇志使⽤4.2.2.1 配置全局日志级别4.2.2.2 配置局部文件夹的日志…

【通过Cpython3.9源码看看python的内存回收机制】

一&#xff1a;建立对象引用计数 1. 相关代码 void _Py_NewReference(PyObject *op) {if (_Py_tracemalloc_config.tracing) {_PyTraceMalloc_NewReference(op);} #ifdef Py_REF_DEBUG_Py_RefTotal; #endifPy_SET_REFCNT(op, 1); #ifdef Py_TRACE_REFS_Py_AddToAllObjects(op…

【算法】AB3DMOT之Sutherland Hodgman多边形裁剪

在AB3MOT模型中有一个步骤为计算IOU时&#xff0c;需要先计算两个立体在地面的投影2D形状&#xff0c;然后计算两个投影的重叠部分&#xff0c;实际上为多边形的裁剪算法。 AB3MOT classmethod def box2corners3d_camcoord(cls, bbox):Takes an objects 3D box with the repr…

懒人式迁移服务器深度学习环境(完全不需要重新下载)

换服务器了&#xff1f;想迁移原来服务器上的深度学习环境&#xff0c;但又觉得麻烦懒得重新安装一遍anaconda、pytorch&#xff1f;有没有办法能不费吹灰之力直接迁移&#xff1f;接下来跟着我一起&#xff0c;懒汉式迁移。   本方法适用于在同一内网下的两台服务器之间互相…

【深度强化学习】(8) iPPO 模型解析,附Pytorch完整代码

大家好&#xff0c;今天和各位分享一下多智能体深度强化学习算法 ippo&#xff0c;并基于 gym 环境完成一个小案例。完整代码可以从我的 GitHub 中获得&#xff1a;https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1. 算法原理 多智能体的情形相比于单智…

SpringCloud GateWay与Nacos使用

网关就相当于一个内网与外网的出入口&#xff0c;起着 安全、验证的功能&#xff0c;如果没有网关&#xff0c;那么如果需要实现验证的功能&#xff0c;除非 SpringCloud GateWay 作为微服务的网关,起着如下作用 ① 作为所有API接口服务请求的接入点 ② 作为所有后端业务服务…

SpringBoot 整合 RabbitMQ (四十一)

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 上一章简单介绍了SpringBoot 实现 Web 版本控制 (四十),如果没有看过,请观看上一章 关于消息中间件 RabbitMQ, 可以看老蝴蝶之前的文章: https://blog.csdn.net/yjltx1234csdn/categor…

还不懂如何与AI高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(一)基础篇

还不懂如何与chatGPT高效交流&#xff1f;保姆级且全面的chatGPT提示词工程教程来啦&#xff01;&#xff08;一&#xff09;基础篇 文章目录还不懂如何与chatGPT高效交流&#xff1f;保姆级且全面的chatGPT提示词工程教程来啦&#xff01;&#xff08;一&#xff09;基础篇一&…

CDH6.3.2大数据集群生产环境安装(七)之PHOENIX组件安装

添加phoenix组件 27.1. 准备安装资源包 27.2. 拷贝资源包到相应位置 拷贝PHOENIX-1.0.jar到/opt/cloudera/csd/ 拷贝PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha、PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel到/opt/cloudera/parcel-repo 27.3. 进入cm页面进行分发、…

【AIGC】9、BLIP-2 | 使用 Q-Former 连接冻结的图像和语言模型 实现高效图文预训练

文章目录一、背景二、方法2.1 模型结构2.2 从 frozen image encoder 中自主学习 Vision-Language Representation2.3 使用 Frozen LLM 来自主学习 Vision-to-Language 生成2.4 Model pre-training三、效果四、局限性论文&#xff1a;BLIP-2: Bootstrapping Language-Image Pre-…

unity 序列化那些事,支持Dictionary序列化

目录 一、普通类型和UnityEngine空间类型序列化 二、数组、list的序列化 三、自定义类的序列化支持 四、自定义asset 五、在inspector面板中支持Dictionary序列化 1、在MonoBehaviour中实现Dictionary序列化 2、自定义property&#xff0c;让其在inpsector能够显示 3、Mo…