WPF技术之DataGrid控件

简介: WPF DataGrid是一种可以显示和编辑数据的界面控件。它可以作为表格形式展示数据,支持添加、删除、修改、排序和分组操作。

1. 属性

  1. 数据绑定:WPF DataGrid可以通过数据绑定的方式将数据源与控件关联起来,实时显示数据的变化。可以将各种类型的集合作为数据源,如List、DataTable等。
  2. 自动列生成:WPF DataGrid会自动根据数据源生成列。可以通过列的属性设置来控制列的宽度、排序、筛选、是否可编辑等。
  3. 编辑支持:WPF DataGrid可以支持单元格编辑、行编辑和整个表格的编辑。可以通过编辑模板来自定义编辑控件。
  4. 排序和分组:WPF DataGrid可以根据列的排序规则对数据进行排序,还可以根据一列或多列对数据进行分组。
  5. 筛选:WPF DataGrid可以通过列头的筛选按钮来筛选数据。可以根据列的类型和值自定义筛选条件。
  6. 样式和模板:WPF DataGrid可以通过样式和模板来自定义表格的外观和交互方式。可以修改列的样式、行的样式、选择行的样式等。
  7. 事件和命令:WPF DataGrid提供了一系列事件和命令来响应用户操作。可以通过这些事件和命令来实现特定的业务逻辑,如点击单元格、选中行、删除数据等。

2.应用场景:

  1. 数据展示:WPF DataGrid可以用来展示各种类型的数据,如员工列表、产品信息、订单明细等。
  2. 数据编辑:WPF DataGrid可以用来编辑数据,如修改员工信息、添加新的产品、删除订单明细等。
  3. 数据分析:WPF DataGrid可以根据不同的列对数据进行排序和分组,方便进行数据分析和统计。
  4. 数据导出:WPF DataGrid可以将表格中的数据导出为各种格式,如Excel、CSV等,方便数据的导出和分享。

3. 举例

下面是一个简单的示例代码,演示如何使用WPF DataGrid控件展示和编辑数据:

<Windowx:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="DataGrid Example"Height="450"Width="800"><Grid><DataGridx:Name="dataGrid"AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumnHeader="ID"Binding="{Binding ID}"/><DataGridTextColumnHeader="Name"Binding="{Binding Name}"/><DataGridTextColumnHeader="Age"Binding="{Binding Age}"/></DataGrid.Columns></DataGrid></Grid></Window>
usingSystem.Collections.Generic;
usingSystem.Windows;
namespaceWpfApp{
publicpartialclassMainWindow : Window    {
publicMainWindow()
        {
InitializeComponent();
// 假设有一个包含Person对象的数据源List<Person>people=newList<Person>            {
newPerson { ID=1, Name="Alice", Age=25 },
newPerson { ID=2, Name="Bob", Age=30 },
newPerson { ID=3, Name="Charlie", Age=35 }
            };
// 将数据源绑定到DataGriddataGrid.ItemsSource=people;
        }
    }
publicclassPerson    {
publicintID { get; set; }
publicstringName { get; set; }
publicintAge { get; set; }
    }
}

image.png

以上代码创建了一个窗口,窗口中包含一个DataGrid控件用于展示数据。通过设置AutoGenerateColumns为False,在DataGrid的Columns中手动定义了三个列,分别对应Person对象的ID、Name和Age属性。

在MainWindow类的构造函数中,创建了一个包含Person对象的列表作为数据源,并将数据源绑定到DataGrid的ItemsSource属性上。

这样,运行程序时就会展示Person对象的数据,并且可以通过DataGrid进行编辑操作。

4.Binding

以下是一个使用绑定的WPF DataGrid示例代码:

<Windowx:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="DataGrid Example"Height="450"Width="800"DataContext="{Binding RelativeSource={RelativeSource Self}}"><Grid><DataGridx:Name="dataGrid"AutoGenerateColumns="False"ItemsSource="{Binding People}"><DataGrid.Columns><DataGridTextColumnHeader="ID"Binding="{Binding ID}"/><DataGridTextColumnHeader="Name"Binding="{Binding Name}"/><DataGridTextColumnHeader="Age"Binding="{Binding Age}"/></DataGrid.Columns></DataGrid></Grid></Window>
usingSystem.Collections.ObjectModel;
usingSystem.ComponentModel;
usingSystem.Windows;
namespaceWpfApp{
publicpartialclassMainWindow : Window, INotifyPropertyChanged    {
privateObservableCollection<Person>_people;
publicObservableCollection<Person>People        {
get { return_people; }
set            {
_people=value;
OnPropertyChanged(nameof(People));
            }
        }
publicMainWindow()
        {
InitializeComponent();
// 初始化People集合并添加数据People=newObservableCollection<Person>            {
newPerson { ID=1, Name="Alice", Age=25 },
newPerson { ID=2, Name="Bob", Age=30 },
newPerson { ID=3, Name="Charlie", Age=35 }
            };
// 设置DataContext为当前窗口实例,以便在XAML中使用绑定DataContext=this;
        }
publiceventPropertyChangedEventHandlerPropertyChanged;
protectedvirtualvoidOnPropertyChanged(stringpropertyName)
        {
PropertyChanged?.Invoke(this, newPropertyChangedEventArgs(propertyName));
        }
    }
publicclassPerson    {
publicintID { get; set; }
publicstringName { get; set; }
publicintAge { get; set; }
    }
}

在这个示例中,MainWindow类实现了INotifyPropertyChanged接口,并定义了People属性作为数据源。通过集合类型ObservableCollection<T>,我们可以实现在数据改变时自动通知UI更新。

在MainWindow的构造函数中,我们初始化了People集合并添加了一些数据。然后将People集合赋值给People属性,这样在XAML中可以使用绑定将DataGrid的ItemsSource属性绑定到People属性上。

为了使绑定生效,我们将MainWindow的DataContext设置为当前窗口实例,这样XAML中的绑定表达式可以正确地引用到MainWindow的属性。

这样,当数据源发生改变时,DataGrid会自动刷新显示,并且可以实现双向绑定,即在DataGrid中修改数据也会反映到数据源上。


总结:

WPF DataGrid是一种功能强大的数据展示和编辑控件,可以满足各种复杂的数据处理需求。它具有丰富的特性和灵活的样式和模板,可以根据具体的业务场景来定制界面和交互方式。无论是简单的数据展示,还是复杂的数据编辑和分析,WPF DataGrid都是一个很好的选择。

目录
相关文章
|
11天前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
|
11天前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
72 1
|
7月前
|
缓存 C# 虚拟化
WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自`ItemsControl`的控件都支持该技术。
|
11天前
|
前端开发 C# 容器
浅谈WPF之控件拖拽与拖动
使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?今天就以一个简单的小例子,简述如何在WPF中实现控件的拖拽和拖动,仅供学习分享使用,如有不足之处,还请指正。
120 2
|
11天前
|
前端开发 C#
浅谈WPF之DataGrid动态生成列
在日常开发中,DataGrid作为二维表格,非常适合数据的展示和统计。通常情况下,一般都有固定的格式和确定的数据列展示,但是在某些特殊情况下,也可能会需要用到动态生成列。本文以一些简单的小例子,简述在WPF开发中,如何动态生成DataGrid的行和列,仅供学习分享使用,如有不足之处,还请指正。
126 2
|
9月前
|
存储 自然语言处理 C#
WPF技术之Binding
WPF(Windows Presentation Foundation)是微软推出的一种用于创建应用程序用户界面的框架。Binding(绑定)是WPF中的一个重要概念,它用于在界面元素和数据源之间建立关联。通过Binding,可以将界面元素(如文本框、标签、列表等)与数据源(如对象、集合、属性等)进行绑定,从而实现数据的双向传递和同步更新。
149 2
WPF技术之Binding
|
11天前
|
C# 开发者 C++
一套开源、强大且美观的WPF UI控件库
一套开源、强大且美观的WPF UI控件库
149 0
|
6月前
|
算法 C# UED
浅谈WPF之控件模板和数据模板
WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计,同时还推出了以模板为核心的新一代设计理念。在WPF中,通过引入模板,将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类:数据模板【Data Template】和控件模板【Control Template】。
108 8
|
8月前
|
C#
WPF技术之动画系列-上下运动
本例子展现动画小球上下循环运动
136 0
|
9月前
|
前端开发 C# 容器
WPF技术之Command
WPF Command是一种在MVVM(Model-View-ViewModel)模式中用于处理用户界面交互的机制。它可以将用户界面事件(如按钮点击、菜单项选择等)与应用程序逻辑(命令处理)解耦,同时提供了一种便捷的方式来管理和执行命令
151 2