WPF 4 DataGrid 控制項(準系統篇)

來源:互聯網
上載者:User

     提到DataGrid 不管是網頁還是應用程式開發都會頻繁使用。通過它我們可以靈活的在行與列間顯示各種資料。本篇將詳細介紹WPF 4 中DataGrid 的相關功能。

自訂欄

     預設情況下,當我們為DataGrid 控制項設定ItemSource 屬性後,DataGrid 會根據資料類型自動產生相應的列,下表列出DataGrid 支援的四種列及其資料類型。

     在建立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>

     其中每列都包含各自的數實值型別,在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 { get; set; }        public string Age { get; set; }        public SexOpt Sex { get; set; }        public bool Pass { get; set; }        public Uri Email { get; set; }    }}

這樣我們就可以通過自訂欄的方式建立出DataGrid:

選擇模式

     預設情況下,DataGrid 的選擇模式為“全行選擇”,並且可以同時選擇多行(如所示),我們可以通過SelectionModeSelectionUnit 屬性來修改DataGrid 的選擇模式。

SelectionUnit:包含CellFullRowCellOrRowHeader 三種單元選擇模式。

                         · Cell:選擇儲存格;

                         · FullRow:選擇全行;

                         · CellOrRowHeader:可選擇儲存格,也可以通過點擊行首選擇全行;

SelectionMode:分為ExtendedSingle 兩種模式。

                           · Extended:選擇多個單元(儲存格或全行,由SelectionUnit 定義);

                           · Single:選擇唯一單元(儲存格或全行,由SelectionUnit 定義);

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

設定SelectionUnit 和SelectionMode 後的執行個體效果:

編輯

     預設情況下,我們可以直接在DataGrid 中編輯資料(下表為相關的編輯命令),當然也可以通過IsReadOnly 屬性將DataGrid 設定為唯讀方式。

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

其他設定

CanUserAddRows、CanUserDeleteRows、CanUserReorderColumns、CanUserResizeColumns、
CanUserResizeRows、CanUserSortColumns 、FrozenColumnCount、DisplayIndex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.