轉(zhuǎn)帖|其它|編輯:郝浩|2011-01-06 16:26:17.000|閱讀 863 次
概述:提到DataGrid 不管是網(wǎng)頁還是應(yīng)用程序開發(fā)都會(huì)頻繁使用。通過它我們可以靈活的在行與列間顯示各種數(shù)據(jù)。本篇將詳細(xì)介紹WPF 4 中DataGrid 的相關(guān)功能。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
提到DataGrid 不管是網(wǎng)頁還是應(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="//schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="//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 屬性來修改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">… …
其他設(shè)置
CanUserAddRows、CanUserDeleteRows、CanUserReorderColumns、CanUserResizeColumns、
CanUserResizeRows、CanUserSortColumns 、FrozenColumnCount、DisplayIndex
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載