DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?

news2025/1/16 18:56:02

在使用DevExpress WinForms的Data Grid之类控件时,可能需要实现自定义用户交互,例如显示数据行的上下文菜单,或者在双击一行时调用编辑表单。在这些情况下,您需要在指定的坐标处标识网格元素。

在本教程中,您将学习如何获取此信息。首先将显示工具提示,指示当前在鼠标光标下的是哪个元素;然后将使用命中信息来实现自定义过滤UI。当最终用户右键单击列单元格时,将根据所单击的单元格的值过滤该列。通过单击自动筛选行,他们可以清除单个列或整个视图中的筛选器。

P.S:DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

获取DevExpress WinForms v24.1正式版下载

起点

从一个具有启用了自动筛选行的GridControl的应用程序开始。

DevExpress WinForms中文教程图集

获取鼠标光标下元素的命中信息

跳转到设计时,将ToolTipController组件放到窗体上,并将其分配给网格的EditorContainer.ToolTipController属性。

DevExpress WinForms中文教程图集

然后,处理ToolTipController的ToolTipController.GetActiveObjectInfo事件。在事件处理程序中,调用View的GridView.CalcHitInfo方法,该方法接受网格中的坐标,并返回一个新创建的hit信息对象,该对象包含View元素在指定位置的信息。使用GridHitInfo.HitTest 属性来获得目标元素类型,最后将元素的名称设置为工具提示文本。

C#

private void toolTipController1_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e) {
if (e.SelectedControl != gridControl1) return;
GridView view = gridControl1.FocusedView as GridView;
// Obtain hit information.
GridHitInfo gridHitInfo = view.CalcHitInfo(e.ControlMousePosition);
// Display the name of the element under a test point.
object o = gridHitInfo.HitTest.ToString();
string text = gridHitInfo.HitTest.ToString();
e.Info = new ToolTipControlInfo(o, text);
}

运行应用程序来查看结果,当您用鼠标指针悬停网格控件元素时,工具提示将显示目标元素的名称。

使用命中信息实现自定义过滤UI

现在看看如何使用点击信息来修改用户交互。

关闭应用程序,选择网格并处理其MouseDown事件。和前面一样,调用GridView.CalcHitInfo方法来获取hit信息对象,检查它是否是右键,以及测试点是否在网格行内。

GridHitInfo.RowHandle属性标识被单击的行,检查此属性是否返回自动筛选器行句柄。如果测试点位于自动筛选行指示符中,则通过调用网格的ColumnView.ActiveFilter对象的Clear方法清除所有应用的筛选条件。如果单击不在行指示符区域中,则必须在其中一列中。使用hit info对象的GridHitInfo.Column属性获取目标列,并仅清除该列的过滤器。

如果单击是在一行上,而不是在自动筛选器行上,则代码假定它是其中一个数据行。为了获得被点击单元格的值,调用网格的GridView.GetRowCellValue方法,并传递被点击的info对象的 GridHitInfo.RowHandle和GridHitInfo.Column属性,然后使用返回值筛选单击的列。

C#

private void gridControl1_MouseDown(object sender, MouseEventArgs e) {
GridView view = (sender as GridControl).FocusedView as GridView;
// Obtain hit information.
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
// Check whether an end-user right-clicked a grid row.
if (((e.Button & MouseButtons.Right) != 0) && (hitInfo.InRow)) {
// Specify actions for the auto-filter row.
if (hitInfo.RowHandle == GridControl.AutoFilterRowHandle)
// If the target element is a row indicator, clear the current filter.
if (hitInfo.HitTest == GridHitTest.RowIndicator)
view.ActiveFilter.Clear();
// Clear the column's filter.
else
hitInfo.Column.FilterInfo = new ColumnFilterInfo();
// Filter grid data by the target cell's value.
else {
object value = view.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column);
hitInfo.Column.FilterInfo = new ColumnFilterInfo(hitInfo.Column, value);
}
}
}

运行应用程序,右键单击任何具有New状态的单元格,可以看到网格的数据现在已被此值过滤。以同样的方式,通过单击Low优先级和Mike Roller单元格筛选数据。然后,右键单击自动筛选行中的Priority单元格来清除此列的筛选,右键单击自动过滤器行的指示符,以清除所有现有的过滤器设置。

DevExpress WinForms中文教程图集

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

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

相关文章

Python案例 | 使用K-means 聚类算法提取图像中的颜色

假如我们需要提取下图中的颜色,可以通过使用 K-means 聚类算法对图像进行颜色聚类分析,并生成一个基于聚类中心(即最具代表性的颜色)的RGB值和调色板。 # 通过使用 K-means 聚类算法对图像进行颜色聚类分析,并生成一个基于聚类中心(即最具代…

时间序列预测(二)——前馈神经网络(Feedforward Neural Network, FNN)

上一篇文章有提到线性回归方程。 时间序列预测(二)——前馈神经网络(Feedforward Neural Network, FNN)-CSDN博客 与线性回归相比: 线性回归只有一个线性层,输入直接映射到输出,不包含隐藏层…

「漏洞复现」灵当CRM data/pdf.php 任意文件读取漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

网页内容获取:Scala自动化脚本的实现

对于开发者和数据科学家来说,自动化获取网页内容是一个常见的需求。Scala,作为一种多范式编程语言,以其强大的函数式编程特性和并发处理能力,成为了编写高效自动化脚本的理想选择。本文将介绍如何使用Scala结合Selenium WebDriver…

Element Ui el-table列表中的tooltip内容过长超出屏幕换行显示

elementui-table组件列表中的tooltip内容过长超出屏幕换行显示内容,虽然el-table列属性中带的有show-overflow-tooltip,可以设置内容超出列宽度显示为…,且有tooltip提示全部内容,但是内容过多时,提示会超出屏幕: 只有…

芒果YOLOv10改进136:注意力机制MLLA|即插即用:融合Mamba设计精髓的线性注意力视觉Transformer

💡本篇内容:芒果YOLOv10改进136:即插即用,最新注意力机制MLLA:融合 Mamba 设计精髓的线性注意力视觉Transformer MLLA|Mamba-Like Linear Attention 模块 | 即插即用 该模块将选择性的状态空间模型和线性注意力在一个统一公式中进行了重新阐述,将Mamba重新定义为具有六个主…

从头开始的可视化数据 matplotlib:初学者努力绘制数据图

从头开始学习使用 matplotlib 可视化数据,对于初学者来说,可能会有些挑战,但 matplotlib 的核心理念非常清晰:绘制图表需要了解如何设置图形、坐标轴以及如何用数据填充它们。我们可以通过一些简单的例子来逐步介绍基本步骤。 1. …

小程序底部导航按钮实现

商城小程序需要四个底部导航按钮,遂记录一下实现过程 最终实现效果如下所示 新建一个小程序项目,我是创建了JS模板,项目创建完成后需要新建五个文件夹,其中四个(page子文件夹)用于存放pages文件&#xff0…

探索光耦:光耦——不间断电源(UPS)系统中的安全高效卫士

在现代社会,不间断电源(UPS)系统已成为保障关键设备和数据安全的关键设施,广泛应用于企业数据中心、家庭电子设备等场景。UPS能在电力中断或波动时提供稳定电力,确保设备持续运行。而在这套系统中,光耦&…

C# 使用S7netplus读取西门子PLC的DB块-S7协议

在工业的设备监控领域,S7协议使用比较普遍下面简单教大家使用 1、添加包 2、添加帮助类(读写数据就研究该类即可,具体的理论就不多说了) //plc中类型与c#类型 bool > Bit //Byte > byte //word > ushort //DWord > uint //Int > short …

【AI知识点】三种不同架构的大语言模型(LLMs)的区别

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI大项目】【AI应用】 在自然语言处理(NLP)中,预训练语言模型(LLMs, Large Language Models)通常基于不同的架构,如仅编码器的模型(Enc…

Java开发中知识点整理

正则表达式 测试网址 Git 分支和主分支有冲突 先checkout origin/分支把origin/master pull进本地分支 修改冲突MergeCommit and Push

Apache SeaTunnel 介绍

SeaTunnel是一个非常易用、超高性能的分布式数据集成平台,支持实时海量数据同步。 每天可稳定高效同步数百亿数据,已被近百家企业应用于生产。 为什么需要 SeaTunnel​ SeaTunnel专注于数据集成和数据同步,主要旨在解决数据集成领域的常见问…

【OSCP Proving Grounds 靶场系列】Slort

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

121页满分PPT | XX集团SAP ERP业务蓝图规划方案

这份PPT是德勤的集团SAP ERP业务蓝图规划方案的详细介绍,涵盖了项目背景、总体目标、ERP总体蓝图规划、总体规划路线设计以及风险与保障措施。方案强调了在煤炭市场疲软的宏观背景下,集团如何通过ERP系统实施来加强管控、提升业财管理一体化,…

VSCode esp-idf环境搭建 报错 ERROR_INVALID_PIP

例如我的报错提示 D:\APP\Espressif\idf531\Espressif\tools\idf-python\3.11.2\python.exe -m pip" is not valid. (ERROR_INVALID_PIP)找到目录位置D:\APP\Espressif\idf531\Espressif\tools\idf-python\3.11.2 使用下面的指令更新pip python -m ensurepippython -m …

二叉搜索树(超详细+通俗易懂)

二叉搜索树定义: 二叉搜索树又被称为二叉排序树/二叉搜索树,为什么会被起这样的名字呢?我们先来看一张二叉搜索树的图片 这张图片里面的树就是二叉搜素树,那么二叉树有什么性质呢?我们从图中可以发现,每一个子树都是…

Flink05 Windows 操作轻松应对复杂的场景

Flink Windows 操作 上篇文章介绍了Flink 几种类型 Windows 本文介绍窗口操作相关API,以及各自使用场景 。 本期Flink Windows 相关操作apply/union/join/collect/CoMap/CoFlatMap Windows apply 通过实现WindowFunction或AllWindowFunction接口来完成的&#x…

工具篇:(三)MacOS 两种方式下载 Node.js 并进行测试教程

MacOS 两种方式下载 Node.js 并进行测试教程 1.Node.js 官网 下载 步骤 1: 访问 Node.js 官网 打开浏览器,访问 Node.js 的官方网站:https://nodejs.org。 在首页,你会看到两个版本可供下载: LTS(长期支持版本&…