当前位置: 首页 > article >正文

C# DataGrid功能总览

目录

  • 前言
  • 一、DataGrid基础功能
    • 1.DataGrid基础属性
    • 2.DataGridTextColumn属性
    • 3.DataGridTemplateColumn属性
    • 4.表DataGrid点击单元格或行时弹出两个按钮
  • 二、其他功能
    • 1.表行DataGrid出现斑马纹效果
    • 2.表行DataGrid字体、行背景标红


前言

最近所实现的功能里,表DataGrid是一个很常用的控件,这篇文章是对DataGrid功能的总览,方便查看


一、DataGrid基础功能

1.DataGrid基础属性

DataGrid 使用了 HandyControl库 ,代码如下:

<DataGridx:Name="Result_DataGrid"d:ItemsSource="{d:SampleData ItemCount=7}"RowHeaderWidth="60"AutoGenerateColumns="False"CanUserAddRows="False"HeadersVisibility="All"hc:DataGridAttach.CanUnselectAllWithBlankArea="True"hc:DataGridAttach.ShowRowNumber="True"VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling"ItemsSource="{Binding TestList}"AlternationCount="2"RowStyle="{DynamicResource DataGridRowStyle}"SelectedItem="{Binding SelTestItem}">
</DataGrid>

代码解析:
1)通用基础属性:

  • d:ItemsSource=“{d:SampleData ItemCount = 7}” :设计时数据(只在 Visual Studio 设计器中显示),显示7条示例数据。
  • RowHeaderWidth=“60”:设置行标题宽度为60
  • AutoGenerateColumns=“False”:不自动生成列,需要手动定义列
  • CanUserAddRows=“False”:禁止用户添加新行
  • HeadersVisibility=“All”:显示所有标题(行标题和列标题)

2)HandyControl扩展属性:

  • hc:DataGridAttach.CanUnselectAllWithBlankArea=“True”:点击空白区域可以取消所有选中项
  • hc:DataGridAttach.ShowRowNumber=“True”:显示行号

3)性能优化

  • VirtualizingStackPanel.IsVirtualizing=“True”:启用虚拟化,提高大数据量时的性能
  • VirtualizingStackPanel.VirtualizationMode=“Recycling”:使用回收虚拟化模式

4)数据绑定

  • ItemsSource=“{Binding TestList}”:绑定到 ViewModel 的 TestList 属性作为数据源
  • SelectedItem=“{Binding SelTestItem}”:将选中的项绑定到 ViewModel 的 SelTestItem 属性(选中行)

2.DataGridTextColumn属性

代码如下(示例):

<DataGridx:Name="Result_DataGrid"d:ItemsSource="{d:SampleData ItemCount=7}"RowHeaderWidth="60"ItemsSource="{Binding TestList}"SelectedItem="{Binding SelTestItem}"><DataGrid.Columns><DataGridTextColumnWidth="auto"Binding="{Binding TestName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"ClipboardContentBinding="{x:Null}"Header="测试名称" /></DataGrid.Columns>
</DataGrid>

DataGridTextColumn 代码解析:

  • Width=“auto” :设置列宽(auto: 自适应宽度 ,NaN: 自动拉伸,100: 设置宽度实际值 )
  • Binding=“{Binding TestName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}”
    • Binding TestName :绑定数据对象的TestName属性
    • UpdateSourceTrigger=PropertyChanged :实时更新
    • Mode = TwoWay :双向绑定
  • Header=“测试名称” :设置列标题
  • ClipboardContentBinding=“{x:Null}” :禁用该列的剪贴板复制功能

3.DataGridTemplateColumn属性

代码如下:

<DataGridx:Name="Result_DataGrid"d:ItemsSource="{d:SampleData ItemCount=7}"RowHeaderWidth="60"ItemsSource="{Binding TestList}"><DataGrid.Columns><DataGridTemplateColumn CanUserResize="False" Header="测试项目"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Margin="0 0 30 0" Text="{Binding TestProject1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/><TextBlock Text="{Binding TestProject2, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></StackPanel></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns>
</DataGrid>

DataGridTemplateColumn 代码解析:

  • CanUserResize=“False” :禁止用户手动调整该列的宽度
  • Header=“测试项目” :设置列标题为"测试项目"
  • CellTemplate(单元格模板):DataTemplate:定义单元格的视觉结构 ,可通过StackPanel 实现输出多个控件

4.表DataGrid点击单元格或行时弹出两个按钮

使用ContextMenu(右侧菜单),代码如下:

<DataGrid>
<DataGrid.ContextMenu><ContextMenu><MenuItemCommand="{Binding Test1Command}"CommandParameter="{Binding ElementName=Result_DataGrid}"Header="测试1" /><MenuItemCommand="{Binding Test2Command}"CommandParameter="{Binding ElementName=Result_DataGrid}"Header="测试2" /></ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

二、其他功能

1.表行DataGrid出现斑马纹效果

1)在Resources中编写样式Style,代码如下:

<Window.Resources><Style x:Key="DataGridRowStyle" TargetType="DataGridRow"><Style.Triggers><!--交替行颜色(斑马纹效果)AlternationIndex(交替索引) 为 0 时,背景为白色;AlternationIndex(交替索引) 为 1 时,背景为浅蓝色;--><Trigger Property="AlternationIndex" Value="0"><Setter Property="Background" Value="#FFFFFF" /><!--白色--></Trigger><Trigger Property="AlternationIndex" Value="1"><Setter Property="Background" Value="LightBlue" /><!--浅蓝色--></Trigger><!--  IsMouseOver:鼠标悬停效果  --><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="LightGray" /><!--浅灰色--></Trigger><!-- IsSelected:选中行效果 --><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="#FF3393DF" /><!--蓝色--></Trigger></Style.Triggers></Style>
</Window.Resources>

2)在相应的DataGrid使用该样式,代码如下:

<DataGridx:Name="Result_DataGrid"ItemsSource="{Binding TestList}"AlternationCount="2"RowStyle="{DynamicResource DataGridRowStyle}"SelectedItem="{Binding SelTestItem}">
</DataGrid>

代码解析:

  • AlternationCount=“2” :设置交替行模式的循环周期(2:表示两种背景样式交替出现)
  • RowStyle=“{DynamicResource DataGridRowStyle}”:将行样式设置为DataGridRowStyle

2.表行DataGrid字体、行背景标红

可通过触发器实现,将触发器写成Style样式,通过调用实现效果,具体分为单条件、多条件触发两种。
1)单条件触发器,代码如下(示例):

<!--触发器:Results 为 NG 字体变红 -->
<DataTrigger Binding="{Binding TestResult}" Value="NG"><Setter Property="Foreground" Value="Red" />
</DataTrigger>

注:如想实现行背景变红,需改为<Setter Property="Background" Value="Red" />

2)多条件触发器,代码如下(示例):

<MultiDataTrigger><!--多条件触发器:同时满足MultiDataTrigger.Conditions里的条件--><MultiDataTrigger.Conditions><Condition Binding="{Binding Results}" Value="NG" /><Condition Binding="{Binding ElementName=self, Path=DataContext.isMaskRedChecked}" Value="True" /></MultiDataTrigger.Conditions><MultiDataTrigger.Setters><!--背景为红色,字体为白色--><Setter Property="Background" Value="Red" /><Setter Property="Foreground" Value="White" /></MultiDataTrigger.Setters>
</MultiDataTrigger>

相关文章:

C# DataGrid功能总览

目录 前言一、DataGrid基础功能1.DataGrid基础属性2.DataGridTextColumn属性3.DataGridTemplateColumn属性4.表DataGrid点击单元格或行时弹出两个按钮 二、其他功能1.表行DataGrid出现斑马纹效果2.表行DataGrid字体、行背景标红 前言 最近所实现的功能里&#xff0c;表DataGri…...

BGP路由策略 基础实验

要求: 1.使用Preva1策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2.用AS_Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0/24 …...

第9讲、深入理解Scaled Dot-Product Attention

Scaled Dot-Product Attention是Transformer架构的核心组件&#xff0c;也是现代深度学习中最重要的注意力机制之一。本文将从原理、实现和应用三个方面深入剖析这一机制。 1. 基本原理 Scaled Dot-Product Attention的本质是一种加权求和机制&#xff0c;通过计算查询(Query…...

2025B难题练习

1.启动多任务排序 拓扑排序 每次选入度为0的点 对每次选的点进行排序 package mainimport ("bufio""fmt""os""slices""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)scanner.Scan()text : scanner.Text()…...

双向长短期记忆网络-BiLSTM

5月14日复盘 二、BiLSTM 1. 概述 双向长短期记忆网络&#xff08;Bi-directional Long Short-Term Memory&#xff0c;BiLSTM&#xff09;是一种扩展自长短期记忆网络&#xff08;LSTM&#xff09;的结构&#xff0c;旨在解决传统 LSTM 模型只能考虑到过去信息的问题。BiLST…...

MySQL UPDATE 执行流程全解析

引言 当你在 MySQL 中执行一条 UPDATE 语句时&#xff0c;背后隐藏着一套精密的协作机制。从解析器到存储引擎&#xff0c;从锁管理到 WAL 日志&#xff0c;每个环节都直接影响数据一致性和性能。 本文将通过 Mermaid 流程图 和 时序图&#xff0c;完整还原 UPDATE 语句的执行…...

亚马逊云科技:开启数字化转型的无限可能

在数字技术蓬勃发展的今天&#xff0c;云计算早已突破单纯技术工具的范畴&#xff0c;成为驱动企业创新、引领行业变革的核心力量。亚马逊云科技凭借前瞻性的战略布局与持续的技术深耕&#xff0c;在全球云计算领域树立起行业标杆&#xff0c;为企业和个人用户提供全方位、高品…...

Gartner《How to Leverage Lakehouse Design in Your DataStrategy》学习心得

一、背景 随着数据量的爆炸式增长和数据类型复杂性的不断提高,企业面临着构建高效、灵活且经济的数据存储与处理架构的挑战。湖仓一体(Lakehouse)作为一种新兴的数据架构设计方法,融合了数据仓库和数据湖的优势,为这一挑战提供了创新的解决方案。Gartner发布了《How to L…...

【实测有效】Edge浏览器打开部分pdf文件显示空白

问题现象 Edge浏览器打开部分pdf文件显示空白或显示异常。 ​​​​​​​ ​​​​​​​ ​​​​​​​ 问题原因 部分pdf文件与edge浏览器存在兼容性问题&#xff0c;打开显示异常。 解决办法 法1&#xff1a;修改edge配置 打开edge浏览器&#x…...

RJ连接器的未来:它还会是网络连接的主流标准吗?

RJ连接器作为以太网接口的代表&#xff0c;自20世纪以来在计算机网络、通信设备、安防系统等领域中占据了核心地位。以RJ45为代表的RJ连接器&#xff0c;凭借其结构稳定、信号传输可靠、成本低廉等优势&#xff0c;在有线网络布线领域被广泛采用。然而&#xff0c;在无线网络不…...

Redis持久化机制详解:保障数据安全的关键策略

在现代应用开发中&#xff0c;Redis作为高性能的内存数据库被广泛使用。然而&#xff0c;内存的易失性特性使得持久化成为Redis设计中的关键环节。本文将全面剖析Redis的持久化机制&#xff0c;包括RDB、AOF以及混合持久化模式&#xff0c;帮助开发者根据业务需求选择最适合的持…...

shell脚本练习(6):备份MySQL数据库表

一、脚本编写 编写脚本如下&#xff1a; #!/bin/bash# 系统数据库 SYS_DB"information_schema|mysql|performance_schema|sys"# 需要备份的数据库 DBmysql -N -e "show databases" | egrep -v $SYS_DBfor i in $DB;do# 备份的路径BAK_PATH"/server/…...

深度学习模型基本框架

简介&#xff1a; 归纳了一套基本框架&#xff0c;以帮助使用者快速创建新的模型&#xff0c;同时有paddlepaddle版本和pytorch版本的&#xff0c;它们虽有差别&#xff0c;但是对于初级使用者&#xff0c;只是两种不同但是很相近的语法而已。都采用paddle平台作为载体来存项目…...

[Java][Leetcode middle] 134. 加油站

方法一&#xff0c;自己想的&#xff0c;超时 双重循环 从第一个点开始循环尝试&#xff0c; 如果最终能走到终点&#xff0c;说明可行。 public int canCompleteCircuit(int[] gas, int[] cost) {int res -1;int n gas.length;int remainGas;int j;for (int i 0; i < …...

DeepSeek 大模型部署全指南:常见问题、优化策略与实战解决方案

DeepSeek 作为当前最热门的开源大模型之一&#xff0c;其强大的语义理解和生成能力吸引了大量开发者和企业关注。然而在实际部署过程中&#xff0c;无论是本地运行还是云端服务&#xff0c;用户往往会遇到各种技术挑战。本文将全面剖析 DeepSeek 部署中的常见问题&#xff0c;提…...

嵌入式培训之数据结构学习(五)栈与队列

一、栈 &#xff08;一&#xff09;栈的基本概念 1、栈的定义&#xff1a; 注&#xff1a;线性表中的栈在堆区&#xff08;因为是malloc来的&#xff09;&#xff1b;系统中的栈区存储局部变量、函数形参、函数返回值地址。 2、栈顶和栈底&#xff1a; 允许插入和删除的一端…...

RabbitMQ--进阶篇

RabbitMQ 客户端整合Spring Boot 添加相关的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 编写配置文件&#xff0c;配置RabbitMQ的服务信息 spri…...

Android Studio报错Cannot parse result path string:

前言 最近在写个小Demo&#xff0c;参考郭霖的《第一行代码》&#xff0c;学习DrawerLayout和NavigationView&#xff0c;不知咋地&#xff0c;突然报错Cannot parse result path string:xxxxxxxxxxxxx 反正百度&#xff0c;问ai都找不到答案&#xff0c;报错信息是完全看不懂…...

matlab求矩阵的逆、行列式、秩、转置

inv - 计算矩阵的逆 用途&#xff1a;计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途&#xff1a;计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…...

关于网站提交搜索引擎

发布于Eucalyptus-blog 一、前言 将网站提交给搜索引擎是为了让搜索引擎更早地了解、索引和显示您的网站内容。以下是一些提交网站给搜索引擎的理由&#xff1a; 提高可见性&#xff1a;通过将您的网站提交给搜索引擎&#xff0c;可以提高您的网站在搜索结果中出现的机会。当用…...

计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM-Attention时间序列预测(完整源码和数据)

EMD-SSA-VMD-LSTM-Attention 一、完整代码实现二、代码结构解析三、关键数学公式四、参数调优建议五、性能优化方向六、工业部署建议 以下是用Python实现EMD-SSA-VMD-LSTM-Attention时间序列预测的完整解决方案。该方案结合了四层信号分解技术与注意力增强的深度学习模型&#…...

二进制与十进制互转的方法

附言: 在计算机科学和数字系统中&#xff0c;二进制和十进制是最常见的两种数制。二进制是计算机内部数据存储和处理的基础&#xff0c;而十进制则是我们日常生活中最常用的数制。因此&#xff0c;掌握二进制与十进制之间的转换方法对于计算机学习者和相关领域的从业者来说至关…...

05、基础入门-SpringBoot-HelloWorld

05、基础入门-SpringBoot-HelloWorld ## 一、Spring Boot 简介 **Spring Boot** 是一个用于简化 **Spring** 应用初始搭建和开发的框架&#xff0c;旨在让开发者快速启动项目并减少配置文件。 ### 主要特点 - **简化配置**&#xff1a;采用“约定优于配置”的原则&#xff0c;减…...

LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析

文章目录 问题描述算法思路&#xff1a;二分查找法关键步骤 代码实现代码解释高频疑问解答1. 为什么循环条件是 left < right 而不是 left < right&#xff1f;2. 为什么比较 nums[mid] > nums[right] 而不是 nums[left] < nums[mid]&#xff1f;3. 为什么 right …...

基于QT(C++)OOP 实现(界面)酒店预订与管理系统

酒店预订与管理系统 1 系统功能设计 酒店预订是旅游出行的重要环节&#xff0c;而酒店预订与管理系统中的管理与信息透明是酒店预订业务的关键问题所在&#xff0c;能够方便地查询酒店信息进行付款退款以及用户之间的交流对于酒店预订行业提高服务质量具有重要的意义。 针对…...

人工智能100问☞第25问:什么是循环神经网络(RNN)?

目录 一、通俗解释 二、专业解析 三、权威参考 循环神经网络(RNN)是一种通过“记忆”序列中历史信息来处理时序数据的神经网络,可捕捉前后数据的关联性,擅长处理语言、语音等序列化任务。 一、通俗解释 想象你在和朋友聊天,每说一句话都会根据之前的对话内容调整语气…...

机械元件杂散光难以把控?OAS 软件案例深度解析

机械元件的杂散光分析 简介 在光学系统设计与工程实践中&#xff0c;机械元件的杂散光问题对系统性能有着不容忽视的影响。杂散光会降低光学系统的信噪比、图像对比度&#xff0c;甚至导致系统功能失效。因此&#xff0c;准确分析机械元件杂散光并采取有效抑制措施&#xff0c…...

游戏引擎学习第289天:将视觉表现与实体类型解耦

回顾并为今天的工作设定基调 我们正在继续昨天对代码所做的改动。我们已经完成了“脑代码&#xff08;brain code&#xff09;”的概念&#xff0c;它本质上是一种为实体构建的自组织控制器结构。现在我们要做的是把旧的控制逻辑迁移到这个新的结构中&#xff0c;并进一步测试…...

【Linux网络】ARP协议

ARP协议 虽然我们在这里介绍 ARP 协议&#xff0c;但是需要强调&#xff0c;ARP 不是一个单纯的数据链路层的协议&#xff0c;而是一个介于数据链路层和网络层之间的协议。 ARP数据报的格式 字段长度&#xff08;字节&#xff09;说明硬件类型2网络类型&#xff08;如以太网为…...

MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试

视频讲解&#xff1a; MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试 继续玩MUSE Pi Pro&#xff0c;今天看下比较关注的gpu这块&#xff0c;从opencl看起&#xff0c;安装clinfo指令 sudo apt install clinfo 可以看到这颗GPU是Imagination的 一般嵌入式中gpu都和hos…...