詳解WPF 4 DataGrid控件的基本功能
給大家講到WPF,我們就不得不提到WinForm,51CTO之前也報(bào)導(dǎo)過《WPF與WinForm對(duì)比談 多線程編程優(yōu)化是關(guān)鍵》的技術(shù)文章,對(duì)于他們之間的優(yōu)劣有了更深刻的認(rèn)識(shí)。而今天我們要講到的是WPF 4中的DataGrid空間。我們也誠(chéng)摯向您推薦《讓你的代碼“炫”起來(lái)——WPF開發(fā)教程》。
提到DataGrid 不管是網(wǎng)頁(yè)還是應(yīng)用程序開發(fā)都會(huì)頻繁使用。通過它我們可以靈活的在行與列間顯示各種數(shù)據(jù)。本篇將詳細(xì)介紹WPF 4 中DataGrid 的相關(guān)功能。
自定義列
默認(rèn)情況下,當(dāng)我們?yōu)镈ataGrid 控件設(shè)置ItemSource 屬性后,DataGrid 會(huì)根據(jù)數(shù)據(jù)類型自動(dòng)生成相應(yīng)的列,下表列出DataGrid 支持的四種列及其數(shù)據(jù)類型。
在創(chuàng)建DataGrid 時(shí)可以通過AutoGenerateColumns 屬性設(shè)置列是否自動(dòng)生成,從而加入自定義列。如果DataGrid 中同時(shí)包含“自動(dòng)生成列”與“用戶自定義列”,則首先創(chuàng)建“用戶自定義列”。下面代碼實(shí)例中分別創(chuàng)建這四種列:
- <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>
其中每列都包含各自的數(shù)值類型,在C# 中創(chuàng)建Member 類及SexOpt 枚舉,并將memberData 數(shù)據(jù)綁定到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 { get; set; }
- public string Age { get; set; }
- public SexOpt Sex { get; set; }
- public bool Pass { get; set; }
- public Uri Email { get; set; }
- }
- }
這樣我們就可以通過自定義列的方式創(chuàng)建出DataGrid:
選擇模式
默認(rèn)情況下,DataGrid 的選擇模式為“全行選擇”,并且可以同時(shí)選擇多行(如下圖所示),我們可以通過SelectionMode 和SelectionUnit 屬性來(lái)修改DataGrid 的選擇模式。
SelectionUnit:包含Cell、FullRow 和CellOrRowHeader 三種單元選擇模式。
◆Cell:選擇單元格;
◆FullRow:選擇全行;
◆CellOrRowHeader:可選擇單元格,也可以通過點(diǎn)擊行首選擇全行;
SelectionMode:分為Extended 和Single 兩種模式。
◆Extended:選擇多個(gè)單元(單元格或全行,由SelectionUnit 定義);
◆Single:選擇唯一單元(單元格或全行,由SelectionUnit 定義);
- <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False"
- SelectionUnit="Cell" SelectionMode="Extended">… …
設(shè)置SelectionUnit 和SelectionMode 后的實(shí)例效果:
編輯
默認(rèn)情況下,我們可以直接在DataGrid 中編輯數(shù)據(jù)(下表為相關(guān)的編輯命令),當(dāng)然也可以通過IsReadOnly 屬性將DataGrid 設(shè)置為只讀方式。
- <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False"
- SelectionUnit="Cell" SelectionMode="Extended" IsReadOnly="True">… …
原文標(biāo)題:WPF 4 DataGrid 控件(基本功能篇)
鏈接:http://www.cnblogs.com/gnielee/archive/2010/04/16/wpf4-datagrid-control-basic.html
【編輯推薦】