C# WPF入门学习主线篇(十)—— DataGrid常见属性和事件

C# WPF入门学习主线篇(十)—— DataGrid常见属性和事件

欢迎来到C# WPF入门学习系列的第十篇。在前面的文章中,我们已经学习了 ButtonTextBoxLabelListBoxComboBox 控件。今天,我们将探讨 WPF 中的另一个重要控件——DataGrid。本文将详细介绍 DataGrid 的常见属性和事件,并通过示例代码展示其在实际应用中的使用。

一、DataGrid的基础知识

DataGrid 是一个非常强大的控件,用于显示和操作表格数据。它允许用户以表格形式查看数据,并支持排序、分组、筛选、编辑等功能。

DataGrid的基本定义

我们先来看看一个简单的 DataGrid 定义:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><DataGrid x:Name="myDataGrid" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/></Grid>
</Window>

在这个示例中,我们定义了一个 DataGrid 控件,并设置了 AutoGenerateColumns 属性为 True,这意味着列将自动根据数据源生成。

二、DataGrid的常见属性

1. ItemsSource

ItemsSource 属性用于绑定 DataGrid 的数据源。可以是数组、列表或任何实现了 IEnumerable 接口的集合。

<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();myDataGrid.ItemsSource = new List<Person>{new Person { Name = "John Doe", Age = 30 },new Person { Name = "Jane Smith", Age = 25 }};}
}public class Person
{public string Name { get; set; }public int Age { get; set; }
}

在这里插入图片描述

2. AutoGenerateColumns

AutoGenerateColumns 属性决定是否自动生成列。设置为 False 时,需要手动定义列。

<DataGrid x:Name="myDataGrid" AutoGenerateColumns="False" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"><DataGrid.Columns><DataGridTextColumn Header="Name" Binding="{Binding Name}"/><DataGridTextColumn Header="Age" Binding="{Binding Age}"/></DataGrid.Columns>
</DataGrid>

3. ColumnHeaderHeight

ColumnHeaderHeight 属性设置列标题的高度。

<DataGrid x:Name="myDataGrid" ColumnHeaderHeight="40" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>

4. CanUserAddRows

CanUserAddRows 属性设置用户是否可以添加新行。

<DataGrid x:Name="myDataGrid" CanUserAddRows="False" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>

5. CanUserDeleteRows

CanUserDeleteRows 属性设置用户是否可以删除行。

<DataGrid x:Name="myDataGrid" CanUserDeleteRows="False" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>

6. IsReadOnly

IsReadOnly 属性设置 DataGrid 是否为只读。

<DataGrid x:Name="myDataGrid" IsReadOnly="True" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>

示例

下面是一个包含以上常见属性的完整示例:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><DataGrid x:Name="myDataGrid" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="True" IsReadOnly="False"ColumnHeaderHeight="40" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"><DataGrid.Columns><DataGridTextColumn Header="Name" Binding="{Binding Name}"/><DataGridTextColumn Header="Age" Binding="{Binding Age}"/></DataGrid.Columns></DataGrid></Grid>
</Window>
using System.Collections.Generic;
using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();myDataGrid.ItemsSource = new List<Person>{new Person { Name = "John Doe", Age = 30 },new Person { Name = "Jane Smith", Age = 25 }};}}public class Person{public string Name { get; set; }public int Age { get; set; }}
}

三、DataGrid的常见事件

1. LoadingRow

LoadingRow 事件在行加载时触发。

XAML代码
<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True" LoadingRow="MyDataGrid_LoadingRow" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>
后台代码
private void MyDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}

2. SelectionChanged

SelectionChanged 事件在选择的项目发生更改时触发。

XAML代码
<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True" SelectionChanged="MyDataGrid_SelectionChanged" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>
后台代码
private void MyDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{DataGrid dataGrid = sender as DataGrid;Person selectedPerson = dataGrid.SelectedItem as Person;if (selectedPerson != null){MessageBox.Show($"Selected Person: {selectedPerson.Name}, Age: {selectedPerson.Age}");}
}

3. CellEditEnding

CellEditEnding 事件在单元格编辑即将结束时触发。

XAML代码
<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True" CellEditEnding="MyDataGrid_CellEditEnding" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="300"/>
后台代码
private void MyDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{MessageBox.Show("Cell editing is ending.");
}

示例总结

以下是一个包含所有三种常见事件的完整示例:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><!-- 定义一个 Grid 容器,用于布局子控件 --><Grid><!-- 定义一个 DataGrid 控件 --><DataGrid x:Name="myDataGrid"AutoGenerateColumns="True" <!-- 自动生成列 -->LoadingRow="MyDataGrid_LoadingRow" <!-- 行加载事件 -->SelectionChanged="MyDataGrid_SelectionChanged" <!-- 选择更改事件 -->CellEditEnding="MyDataGrid_CellEditEnding" <!-- 单元格编辑结束事件 -->HorizontalAlignment="Left" VerticalAlignment="Top" <!-- 控件水平和垂直对齐 -->Width="500" Height="300"/> <!-- 控件宽度和高度 --></Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;namespace WpfApp
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent(); // 初始化组件// 初始化数据源并绑定到 DataGridmyDataGrid.ItemsSource = new List<Person>{new Person { Name = "John Doe", Age = 30 },new Person { Name = "Jane Smith", Age = 25 }};}// 行加载事件处理程序private void MyDataGrid_LoadingRow(object sender, DataGridRowEventArgs e){// 设置行头为行索引加一(从1开始)e.Row.Header = (e.Row.GetIndex() + 1).ToString();}// 选择更改事件处理程序private void MyDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){// 获取触发事件的 DataGridDataGrid dataGrid = sender as DataGrid;// 获取选中的项目并转换为 Person 类型Person selectedPerson = dataGrid.SelectedItem as Person;if (selectedPerson != null) // 如果有选中的项目{// 显示选中的人的名字和年龄MessageBox.Show($"Selected Person: {selectedPerson.Name}, Age: {selectedPerson.Age}");}}// 单元格编辑结束事件处理程序private void MyDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e){// 显示单元格编辑结束消息MessageBox.Show("Cell editing is ending.");}}// 定义一个简单的 Person 类,用于数据绑定public class Person{public string Name { get; set; } // 名字属性public int Age { get; set; } // 年龄属性}
}

四、总结

本文详细介绍了 WPF 中 DataGrid 控件的常见属性和事件,通过具体的示例代码展示了如何使用这些属性和事件。通过本文的学习,读者应该能够掌握 DataGrid 的基本用法,并在实际项目中灵活运用这些知识。

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

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

相关文章

Python私教张大鹏 Vue3整合AntDesignVue之Anchor 锚点

用于跳转到页面指定位置。 何时使用 需要展现当前页面上可供跳转的锚点链接&#xff0c;以及快速在锚点之间跳转。 案例&#xff1a;锚点的基本使用 核心代码&#xff1a; <template><a-anchor:items"[{key: part-1,href: #part-1,title: () > h(span, {…

大学国学搜题软件?分享7个软件和公众号,来对比看看吧 #经验分享#微信#媒体

在大学里&#xff0c;高效的学习工具可以帮助我们更好地管理时间和资源&#xff0c;提高学习效果。 1.彩虹搜题 这是个老公众号了 多语言查询支持&#xff0c;满足国际用户需求。全球通用&#xff0c;无障碍搜题。 下方附上一些测试的试题及答案 1、某酸碱指示剂的&#xf…

Web前端推送功能:深入剖析与应用实践

Web前端推送功能&#xff1a;深入剖析与应用实践 在信息化社会的今天&#xff0c;Web前端推送功能作为实时通信和个性化服务的重要手段&#xff0c;受到了广泛的关注和应用。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨Web前端推送功能的原理、应用、…

uniapp自定义的下面导航

uniapp自定义的下面导航 看看效果图片吧 文章目录 uniapp自定义的下面导航 看看效果图片吧 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6aa0e964741d4dd3a58f4e86c4bf3247.png) 前言一、写组件、我这里就没有写组件了直接写了一个页面&#xff1f;总结 前言 在…

职场十大法则:与大家共勉

现在的社会很浮躁&#xff0c;在职的我们也都很浮躁&#xff0c;总是这山望着那山高&#xff0c;都是在为薪资而努力奋斗&#xff08;甚至跳槽&#xff09;。以下是关于职场法则的一些主要内容和建议&#xff0c;与大家共勉&#xff1a; 职场法则一&#xff1a;主动与积极&…

Elasticsearch 认证模拟题 - 12

一、题目 在集群上有 task2 索引&#xff0c;请重建它到 task2_new 索引上&#xff0c;并满足以下要求&#xff1a; task2 索引的 a 字段包含有关键字 Yoo-Hoo 和 YooHoo&#xff0c;不管搜索 Yoo-Hoo 还是YooHoo 它们的结果应该一样task2_new 和 task2 的 mapping 应该一样 …

软件架构x86 、 x86_64、 arm64、aarch64

看系统信息: 大多数Linux发行版都提供如 uname -a命令 arch命令用于显示当前主机的硬件架构类型。 例如 下面的是Kylin Linux Advanced Server for Kunpeng V10 操作系统 (鲲鹏处理器是华为在2019年1月向业界发布的高性能数据中心处理器 ) 下面这个是 ubuntu 18.04.6 …

CMakeLists如何多行注释

在使用Visual Studio编写CMakeLists的时候你可能会遇到需要多行注释的情况&#xff0c;可又不知道快捷键是什么。。。 其实你只需要敲个 #[[ 就行了&#xff0c;另外一般方括号VS会自动帮你补全&#xff0c;之后将需要注释的内容放在第二个方括号与第三个方括号之间就完成注释…

1-8 C语言分支循环语句

C语言的语句分为 5 类 1&#xff1a;表达式语句2&#xff1a;函数调用语句3&#xff1a;控制语句4&#xff1a;复合语句5&#xff1a;空语句 控制语句&#xff1a;用于控制程序的执行流程&#xff0c;以实现程序的各种结构方式&#xff0c;它们由特定的语句定义符组成&#x…

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 目录 Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 一、简单介绍 二、中药数据分析项目实战 三、数据处理与分析实战 1、数据读取 2、中药材数据集的数据处理与分析 2.1数据清洗 2.2、 提取别…

针对AlGaN/GaN高电子迁移率晶体管的显式表面电势计算和紧凑电流模型

来源&#xff1a;An Explicit Surface Potential Calculation and Compact Current Model for AlGaN/GaN HEMTs&#xff08;EDL 15年&#xff09; 摘要 在本文中,我们提出了一种新的紧凑模型,用于基于费米能级和表面电位的显式解来描述AlGaN/GaN高电子迁移率晶体管。该模型计算…

台湾合泰原装BS66F360 封装LQFP-44 电容触摸按键 AD+LED增强型触控

BS66F360是一款由Holtek Semiconductor Inc.生产的微控制器&#xff08;microcontroller&#xff09;&#xff0c;具有触摸检测和LED驱动功能。其应用领域广泛&#xff0c;包括但不限于以下几个方面&#xff1a; 1. 触摸按键应用&#xff1a;BS66F360内置了触摸按键检测功能&am…

华为云耀云服务器L实例规则配置教程(亲自实操经验)

我刚买了这个最基础的36&#xffe5;的L实例的云服务器&#xff0c;这个实例是自带公网ip的&#xff0c;不需要额外购买。我准备先配置好&#xff0c;能够通过公网ip访问&#xff0c;以便之后上传javaweb项目可以直接访问&#xff0c;不过中途遇到了点问题&#xff0c;但是已解…

富格林:曝光纠正出金亏损陋习

富格林悉知&#xff0c;虽然现货黄金市场看似变化无常&#xff0c;在操作方向上依旧是有迹可循的&#xff0c;投资者需要了解曝光的专业经验纠正陋习阻止出金亏损。要获得优质的黄金投资出金效果&#xff0c;就需要在明确现货黄金操作技巧的前提下&#xff0c;只有规范遵循已曝…

Ansible——script模块

目录 特点 参数总结 使用 ansible 命令 1. 基本示例 2. 传递参数 3. 使用 creates 参数 4. 使用 removes 参数 示例 Playbook 文件 基本语法 1. 基本使用 2. 传递参数 3. 使用 creates 参数 4. 使用 removes 参数 5. 使用 register 捕获输出 6. 使用 args 指定参数…

【Vue】sync修饰符

文章目录 一、介绍二、语法三、代码示例 一、介绍 作用&#xff1a;可以实现 子组件 与 父组件数据 的 双向绑定&#xff0c;简化代码 简单理解&#xff1a;子组件可以修改父组件传过来的props值 特点&#xff1a;prop属性名&#xff0c;可以自定义&#xff0c;非固定为valu…

如何安装 CleanMyMac X 4.15.3破解版

CleanMyMac X 4.15.3破解版是一款专业的Mac系统清理软件&#xff0c;可一键智能扫描清理mac系统日志缓存磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X 破解版可以强力卸载恶意软件&#xff0c;修复系统漏洞&…

仿今日头条的新闻资讯系统

软件简介 新闻资讯系统&#xff0c;前端基于 Uniapp、Uview&#xff0c;后端基于Ruoyi系统&#xff0c;代码易读易懂、界面简洁美观。一套前端代码&#xff0c;同时支持微信小程序、Android、Ios应用等多种应用。 平台简介 新闻资讯系统&#xff0c;主要包括首页、行业资讯、…

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator&#xff0c;它不仅仅是一个简单的图形编辑工具&#xff0c;更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中&#xff0c;用户可以通过各种精心设计的工具&#xff0c;轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…

高中数学:数列-基础概念

一、什么是数列&#xff1f; 一般地&#xff0c;我们把按照确定的顺序排列的一列数称为数列&#xff0c;数列中的每一个数叫做这个数列的项&#xff0c;数列的第一项称为首项。 项数有限个的数列叫做有穷数列&#xff0c;项数无限个的数列叫做无穷数列。 二、一般形式 数列和…