详解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 中同时包含“自动生成列”与“用户自定义列”,则首先创建“用户自定义列”。下面代码实例中分别创建这四种列:

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

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

using System;  
using System.Windows;  
using System.Collections.ObjectModel;  
 
namespace WPF4ControlTest  
{  
    /// <summary>  
    /// Interaction logic for MainWindow.xaml  
    /// </summary>  
    public partial class MainWindow : Window  
    {  
        public MainWindow()  
        {  
            InitializeComponent();  
ObservableCollection<Member> memberData = new ObservableCollection<Member>();  
            memberData.Add(new Member()  
            {  
                Name = "Joe", Age = "23", Sex = SexOpt.Male,  
                Pass = true, Email = new Uri("mailto:Joe@school.com")  
            });  
            memberData.Add(new Member()  
            {  
                Name = "Mike", Age = "20",  
                Sex = SexOpt.Male, Pass = false,  
                Email = new Uri("mailto:Mike@school.com")  
            });  
            memberData.Add(new Member()  
            {  
                Name = "Lucy", Age = "25",  
                Sex = SexOpt.Female, Pass = true,  
                Email = new Uri("mailto:Lucy@school.com")  
            });  
            dataGrid.DataContext = memberData;  
        }  
    }  
 
    public enum SexOpt { Male, Female };  
 
    public class Member  
    {  
        public string Name { getset; }  
        public string Age { getset; }  
        public SexOpt Sex { getset; }  
        public bool Pass { getset; }  
        public Uri Email { getset; }  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.

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

主窗口

选择模式

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

DefaultMode

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

 ◆Cell:选择单元格; 

◆FullRow:选择全行; 

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

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

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

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

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

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

ModeSample

编辑

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

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

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

2010-01-05 15:27:04

.NET Framew

2010-03-02 17:43:31

WCF框架处理流程

2021-06-03 09:20:33

微服务架构代码

2019-09-16 08:22:12

特权访问管理PAM网络安全

2015-07-07 14:17:56

物联网操作系统

2023-05-11 08:59:43

Nginx配置服务器

2010-01-20 18:20:50

2010-01-04 10:47:08

智能交换机

2009-12-03 09:08:21

路由器基本功能

2017-01-15 17:15:27

Java基本功能

2011-04-29 14:04:56

一体机

2009-12-03 14:10:22

路由器基本功能

2009-12-08 13:58:12

Linux操作系统垃圾邮件

2010-02-03 09:59:18

2015-11-09 10:34:54

iOS 9.1 iPhone

2009-11-24 17:35:59

路由器基本功能
点赞
收藏

51CTO技术栈公众号