详解WPF 4 DataGrid控件的基本功能

开发 后端
本文将为大家介绍WPF 4中DataGrid的相关功能,通过DataGrid我们可以在行与列之间显示各种数据。

给大家讲到WPF,我们就不得不提到WinForm,51CTO之前也报导过《WPF与WinForm对比谈 多线程编程优化是关键》的技术文章,对于他们之间的优劣有了更深刻的认识。而今天我们要讲到的是WPF 4中的DataGrid空间。我们也诚挚向您推荐《让你的代码“炫”起来——WPF开发教程》。

提到DataGrid 不管是网页还是应用程序开发都会频繁使用。通过它我们可以灵活的在行与列间显示各种数据。本篇将详细介绍WPF 4 中DataGrid 的相关功能。

自定义列

默认情况下,当我们为DataGrid 控件设置ItemSource 属性后,DataGrid 会根据数据类型自动生成相应的列,下表列出DataGrid 支持的四种列及其数据类型。

Column

在创建DataGrid 时可以通过AutoGenerateColumns 属性设置列是否自动生成,从而加入自定义列。如果DataGrid 中同时包含“自动生成列”与“用户自定义列”,则首先创建“用户自定义列”。下面代码实例中分别创建这四种列:

  1. <Window x:Class="WPF4ControlTest.MainWindow" 
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.         xmlns:local="clr-namespace:WPF4ControlTest" 
  5.         xmlns:assembly="clr-namespace:System;assembly=mscorlib" 
  6.         Title="MainWindow" Height="200" Width="500"> 
  7.     <Window.Resources> 
  8.         <ObjectDataProvider x:Key="sexEnum" MethodName="GetValues"   
  9.                             ObjectType="{x:Type assembly:Enum}"> 
  10.             <ObjectDataProvider.MethodParameters> 
  11.                 <x:Type Type="local:SexOpt"/> 
  12.             </ObjectDataProvider.MethodParameters> 
  13.         </ObjectDataProvider> 
  14.     </Window.Resources> 
  15.     <Grid> 
  16.         <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False"> 
  17.             <DataGrid.Columns> 
  18.                 <DataGridTextColumn Header="Name" Width="80" Binding="{Binding Name}"/> 
  19.                 <DataGridTextColumn Header="Age" Width="50" Binding="{Binding Age}"/> 
  20.                 <DataGridComboBoxColumn Width="80" Header="Sex"   
  21.                                         SelectedItemBinding="{Binding Sex}"   
  22.                               ItemsSource="{Binding Source={StaticResource sexEnum}}"/> 
  23.                 <DataGridCheckBoxColumn Header="Pass Exam?" Width="100"   
  24.                                         Binding="{Binding Pass}"/> 
  25.                 <DataGridHyperlinkColumn Header="Email" Width="150"   
  26.                                          Binding="{Binding Email}"/> 
  27.             </DataGrid.Columns> 
  28.         </DataGrid> 
  29.     </Grid> 
  30. </Window> 

其中每列都包含各自的数值类型,在C# 中创建Member 类及SexOpt 枚举,并将memberData 数据绑定到DataGrid:

  1. using System;  
  2. using System.Windows;  
  3. using System.Collections.ObjectModel;  
  4.  
  5. namespace WPF4ControlTest  
  6. {  
  7.     /// <summary>  
  8.     /// Interaction logic for MainWindow.xaml  
  9.     /// </summary>  
  10.     public partial class MainWindow : Window  
  11.     {  
  12.         public MainWindow()  
  13.         {  
  14.             InitializeComponent();  
  15. ObservableCollection<Member> memberData = new ObservableCollection<Member>();  
  16.             memberData.Add(new Member()  
  17.             {  
  18.                 Name = "Joe", Age = "23", Sex = SexOpt.Male,  
  19.                 Pass = true, Email = new Uri("mailto:Joe@school.com")  
  20.             });  
  21.             memberData.Add(new Member()  
  22.             {  
  23.                 Name = "Mike", Age = "20",  
  24.                 Sex = SexOpt.Male, Pass = false,  
  25.                 Email = new Uri("mailto:Mike@school.com")  
  26.             });  
  27.             memberData.Add(new Member()  
  28.             {  
  29.                 Name = "Lucy", Age = "25",  
  30.                 Sex = SexOpt.Female, Pass = true,  
  31.                 Email = new Uri("mailto:Lucy@school.com")  
  32.             });  
  33.             dataGrid.DataContext = memberData;  
  34.         }  
  35.     }  
  36.  
  37.     public enum SexOpt { Male, Female };  
  38.  
  39.     public class Member  
  40.     {  
  41.         public string Name { getset; }  
  42.         public string Age { getset; }  
  43.         public SexOpt Sex { getset; }  
  44.         public bool Pass { getset; }  
  45.         public Uri Email { getset; }  
  46.     }  

这样我们就可以通过自定义列的方式创建出DataGrid:

主窗口

选择模式

默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改DataGrid 的选择模式。

DefaultMode

SelectionUnit:包含Cell、FullRow 和CellOrRowHeader 三种单元选择模式。 

 ◆Cell:选择单元格; 

◆FullRow:选择全行; 

 ◆CellOrRowHeader:可选择单元格,也可以通过点击行首选择全行;

SelectionMode:分为Extended 和Single 两种模式。 

◆Extended:选择多个单元(单元格或全行,由SelectionUnit 定义); 

◆Single:选择唯一单元(单元格或全行,由SelectionUnit 定义); 

  1. <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" 
  2.           SelectionUnit="Cell" SelectionMode="Extended">… … 
 

设置SelectionUnit 和SelectionMode 后的实例效果:

ModeSample

编辑

默认情况下,我们可以直接在DataGrid 中编辑数据(下表为相关的编辑命令),当然也可以通过IsReadOnly 属性将DataGrid 设置为只读方式。

  1. <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" 
  2.           SelectionUnit="Cell" SelectionMode="Extended" IsReadOnly="True">… … 
 

Edit

原文标题:WPF 4 DataGrid 控件(基本功能篇)

链接:http://www.cnblogs.com/gnielee/archive/2010/04/16/wpf4-datagrid-control-basic.html

【编辑推荐】

  1. Visual Studio 2010截图曝光 以WPF开发UI
  2. 为WPF项目创建单元测试
  3. 详解Silverlight和WPF互相扩展
  4. 教你如何理解WPF中的Template类
  5. 详谈WPF开发中的数据虚拟化
责任编辑:彭凡 来源: 博客园
相关推荐

2010-06-28 21:33:17

eMule协议

2012-10-22 16:47:45

IBMdw

2020-10-19 10:16:02

AWSDynamoDB功能

2019-04-16 08:21:46

2021-06-03 09:20:33

微服务架构代码

2019-09-16 08:22:12

特权访问管理PAM网络安全

2010-03-02 17:43:31

WCF框架处理流程

2010-01-05 15:27:04

.NET Framew

2015-07-07 14:17:56

物联网操作系统

2010-01-04 10:47:08

智能交换机

2023-05-11 08:59:43

Nginx配置服务器

2010-01-20 18:20:50

2017-01-15 17:15:27

Java基本功能

2011-04-29 14:04:56

一体机

2009-12-03 14:10:22

路由器基本功能

2009-12-03 09:08:21

路由器基本功能

2009-11-24 17:35:59

路由器基本功能

2010-02-03 09:59:18

2009-12-08 13:58:12

Linux操作系统垃圾邮件

2015-11-09 10:34:54

iOS 9.1 iPhone
点赞
收藏

51CTO技术栈公众号