Categories: WPF 教程

WPF教程之 DataGrid列

DataGrid 控件:

DataGrid列

在上一章中,我们了解到让WPF DataGrid启动并运行是多么容易的一件事。 其中一个原因是DataGrid会根据您使用的数据源自动为您生成适当的列。

但是,在某些情况下,您可能需要手动要定义显示的列,因为您不需要数据源的所有属性/列,或者因为您想控制使用哪种内联编辑器。

用户自定义列

让我们来尝试一个例子,它看起来和前一章的例子很像,但是我们将手动定义所有列以获得最大的控制。 您可以根据您希望显示/编辑的数据选择列类型。 截至撰写时,以下列类型可用:

  • DataGridTextColumn
  • DataGridCheckBoxColumn
  • DataGridComboBoxColumn
  • DataGridHyperlinkColumn
  • DataGridTemplateColumn

尤其是最有一个,DataGridTemplateColumn列,非常有意思。它允许你定义任意类型的内容,提供了了在列内部使用自定义控件的条件,不管这个控件是来自WPF库还是第三方控件,下面是一个例子:

<Window x:Class="WpfTutorialSamples.DataGrid_control.DataGridColumnsSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataGridColumnsSample" Height="200" Width="300">
    <Grid Margin="10">
  <DataGrid Name="dgUsers" AutoGenerateColumns="False">
   <DataGrid.Columns>

    <DataGridTextColumn Header="Name" Binding="{Binding Name}" />

    <DataGridTemplateColumn Header="Birthday">
     <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
       <DatePicker SelectedDate="{Binding Birthday}" BorderThickness="0" />
      </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

   </DataGrid.Columns>
  </DataGrid>
 </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Windows;

namespace WpfTutorialSamples.DataGrid_control
{
 public partial class DataGridColumnsSample : Window
 {
  public DataGridColumnsSample()
  {
   InitializeComponent();

   List<User> users = new List<User>();
   users.Add(new User() { Id = 1, Name = "John Doe", Birthday = new DateTime(1971, 7, 23) });
   users.Add(new User() { Id = 2, Name = "Jane Doe", Birthday = new DateTime(1974, 1, 17) });
   users.Add(new User() { Id = 3, Name = "Sammy Doe", Birthday = new DateTime(1991, 9, 2) });

   dgUsers.ItemsSource = users;
  }
 }

 public class User
 {
  public int Id { get; set; }

  public string Name { get; set; }

  public DateTime Birthday { get; set; }
 }
}

在标记里,为了能够控制我们要使用的列,我给表格增加一个AutoGenerateColumns属性,并设置为false。你可以看到,我并没有处理ID列,因为我决定在这个例子里不去关心它。对于Name属性,我用一个简单的文本列,所以,这个例子里最有意思的部分就是这个Birthday列,我使用了内部是DataPicker控件的DataGridTemplateColumn列。这样可以允许用户从日历里面选择一天,而不是手动把日期敲进去,就像你在截图中看到的那样。

总结

通过AutoGenerateColumns属性关闭自动生成列的功能,你可以完全控制哪些列可以显示出来,以及这些列的数据是如何显示和编辑。通过这篇文章的例子你可以看到,自定义列的功能提供了许多很有意思的可能性,你可以通过完全自定义的列编辑器来提高用户体验。

andy

前端小白,在Web176教程网这个平台跟大家一起学习,加油!

Share
Published by
andy

Recent Posts

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

1 天 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

1 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

2 周 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

2 周 ago

聊聊React和Vue组件更新的实现及区别

React 和 Vue 都是当…

3 周 ago