示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名

本文主要是介绍示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、目的:通过重写DataGrid的OnAutoGeneratingColumn方法实现根据定义特性自动生成列头信息功能


二、实现

<DataGrid ItemsSource="{local:GetStudents Count=50}"/>

实体定义如下 

 public class Student{[DataGridColumn("*")][Display(Name = "姓名", GroupName = "基础信息")][Required]public string Name { get; set; }[DataGridColumn("*")][Display(Name = "班级", GroupName = "基础信息")][Required]public string Class { get; set; }[DataGridColumn("2*")][Display(Name = "地址", GroupName = "基础信息")][Required]public string Address { get; set; }[DataGridColumn("2*")][Display(Name = "邮箱", GroupName = "基础信息")][Required]public string Emall { get; set; }[Display(Name = "可用", GroupName = "其他信息")][Required]public bool IsEnbled { get; set; }[Display(Name = "时间", GroupName = "其他信息")][Required]public DateTime Time { get; set; }[Display(Name = "年龄", GroupName = "基础信息")][Required]public int Age { get; set; }[Display(Name = "分数", GroupName = "成绩信息")]public double Score { get; set; }[DataGridColumn("2*")][Display(Name = "电话号码", GroupName = "基础信息")][Required][RegularExpression("^1[3|4|5|7|8][0-9]{9}$", ErrorMessage = "手机号码不合法!")]public string Tel { get; set; }}

通常如上定义会生成一个根据属性名称列头的表格

三、环境

VS2022

四、示例

自定义一个DislayDataGrid,重写OnAutoGeneratingColumn方法

    public class DislayDataGrid : DataGrid{protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e){base.OnAutoGeneratingColumn(e);if (e.PropertyDescriptor is PropertyDescriptor descriptor)e.Column.Header = descriptor.Attributes.OfType<DisplayAttribute>()?.FirstOrDefault().Name;}}

此时会根据读取特性生成中文名称列头

 

同理其他属性也可以这样设置

 我们扩展一个特性DataGridColumnAttribute

    [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]public class DataGridColumnAttribute : Attribute, IDataGridColumn{public DataGridColumnAttribute(string width){DataGridLengthConverter converter = new DataGridLengthConverter();this.Width = (DataGridLength)converter.ConvertFromString(width);}public DataGridColumnAttribute(){}public DataGridLength Width { get; set; } = DataGridLength.Auto;public Type Template { get; set; } = typeof(DataGridTextColumn);/// <summary>/// "{0}.Property"/// </summary>public string PropertyPath { get; set; } = "{0}";public virtual DataGridColumn GetDataGridColumn(PropertyInfo propertyInfo){DataGridColumn dataGridColumn = Activator.CreateInstance(this.Template) as DataGridColumn;if (dataGridColumn == null){if (propertyInfo.PropertyType == typeof(bool)){return new DataGridCheckBoxColumn() { Width = this.Width, IsReadOnly = false };}else if (propertyInfo.PropertyType.IsEnum){return new DataGridComboBoxColumn() { Width = this.Width, IsReadOnly = false };}else{return new DataGridTextColumn() { Width = this.Width, IsReadOnly = false };}}dataGridColumn.Width = this.Width;return dataGridColumn;}}

在生成列时应用该特性

此时列宽也根据特性变化

如果不想通过自定义DisplayDataGrid实现也可以用Behavior行为的方式实现

实现方式如下:

    <DataGrid ItemsSource="{h:GetStudents Count=50}"><b:Interaction.Behaviors><h:DataGridAutoColumnBehavior Type="{x:Type h:Student}"/></b:Interaction.Behaviors></DataGrid>

DataGridAutoColumnBehavior的具体实现方式如下

WPF-Control/Source/Extensions/H.Extensions.Behvaiors/DataGrid/DataGridAutoColumnBehavior.cs at main · HeBianGu/WPF-Control · GitHub

这种方式在自动化生成表格数据中非常有用 

五、需要了解的知识点

DataGrid.OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs) 方法 (System.Windows.Controls) | Microsoft Learn

DataGrid 类 (System.Windows.Controls) | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

这篇关于示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参