WPF之DataGrid

WPF之DataGrid

1.DataGrid控件提供了丰富的功能,包括:

数据绑定:可以将DataGrid绑定到任何数据源,如List、集合或数据库中的数据。
列定义:可以定义多种类型的列,如文本、日期、货币、枚举等。
编辑模式:支持编辑模式,如双击单元格进行编辑或使用快捷键。
选择模式:支持多种选择模式,如单选、多选、范围选择等。
分组:可以对数据进行分组,使大量数据更易于浏览。
过滤和排序:允许用户通过拖放列头来过滤和排序数据。
模板:可以使用模板自定义单元格和行的外观。


2. DataGrid的属性
DataGrid控件有多个属性,这些属性决定了控件的行为和外观。以下是一些常用的属性:

AutoGenerateColumns:决定是否自动生成列。
CanUserAddRows:决定是否允许用户添加新行。
CanUserDeleteRows:决定是否允许用户删除行。
Columns:定义列的集合。
ItemsSource:绑定到DataGrid的数据源。
SelectedItem:选中的项目。
DataGrid的事件


3.DataGrid控件触发的事件包括:

CellEditEnding:编辑单元格结束时触发。
ColumnHeaderClick:列标题点击时触发。
CurrentCellChanged:当前单元格变化时触发。
RowEditEnding:编辑行结束时触发。

示例:

<Window x:Class="WpfApp9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp9"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <DataGrid x:Name="paraDataGrid" AutoGenerateColumns="True" CanUserAddRows="True" CanUserDeleteRows="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="参数名称" Width="Auto"/>
                <DataGridTextColumn Header="参数内容" Width="Auto"/>
            </DataGrid.Columns>
            
        </DataGrid>
   </Grid>
</Window>

常用属性

AutoGenerateColumns="True"
<Window x:Class="WpfApp9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp9"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <DataGrid x:Name="dataGrid" AutoGenerateColumns="True">
            
            
        </DataGrid>
    </Grid>
</Window>

using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp9
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<Person> list = new List<Person>();

            list.Add(new Person("major","18"));
            list.Add(new Person("major1", "20"));
            dataGrid.ItemsSource = list;
        }
    }

    public class Person
    {
       public string Name { get; set; }
       public string Age { get; set; }

        public Person(string name,string age)
        {
            Name = name;
            Age = age;
        }
    }

}

在这里插入图片描述

        <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" RowBackground="AliceBlue" >
            
            
        </DataGrid>

在这里插入图片描述

        <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" RowBackground="AliceBlue" AlternatingRowBackground="Pink">
            
            
        </DataGrid>

在这里插入图片描述

        <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" RowBackground="AliceBlue" AlternatingRowBackground="Pink" ColumnHeaderHeight="50">


        </DataGrid>

在这里插入图片描述

  <Grid Margin="10">
      <DataGrid Name="DgPersons" AutoGenerateColumns="False" RowBackground="LightPink" AlternatingRowBackground="LightBlue" ColumnHeaderHeight="30" RowHeaderWidth="20" ColumnWidth="100" GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="Red" HeadersVisibility="All" LoadingRow="DgPersons_LoadingRow" RowDetailsVisibilityMode="VisibleWhenSelected" HorizontalScrollBarVisibility="Auto" FrozenColumnCount="2" SelectionChanged="DgPersons_SelectionChanged" SelectionMode="Extended">
          <DataGrid.RowDetailsTemplate>
              <DataTemplate>
                  <Border BorderBrush="LightGoldenrodYellow" BorderThickness="1" Margin="3" Padding="5">
                      <TextBlock Text="{Binding Description}" TextWrapping="Wrap"/>
                  </Border>
              </DataTemplate>
          </DataGrid.RowDetailsTemplate>
          <DataGrid.ColumnHeaderStyle>
              <Style TargetType="{x:Type DataGridColumnHeader}">
                  <Setter Property="Foreground" Value="LightGreen"/>
              </Style>
          </DataGrid.ColumnHeaderStyle>
          <DataGrid.Columns>
              <DataGridCheckBoxColumn Binding="{Binding IsChecked}" Width="40"/>
              <DataGridTextColumn Header="编号" Binding="{Binding Id}" Width="40"/>
              <DataGridTextColumn Header="名字" Binding="{Binding Name}" Width="100">
                  <DataGridTextColumn.ElementStyle>
                      <Style TargetType="{x:Type TextBlock}">
                          <Setter Property="Foreground" Value="Blue"/>
                      </Style>
                  </DataGridTextColumn.ElementStyle>
              </DataGridTextColumn>
              <!--<DataGridTextColumn Header="年龄" Binding="{Binding Age}" Width="40"/>-->
              <DataGridTemplateColumn>
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <Grid Background="{Binding Age}">
                              <TextBlock Text="{Binding Age}" Width="50"/>
                          </Grid>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
              <DataGridTextColumn Header="学号" Binding="{Binding Number}" Width="120"/>
              <DataGridComboBoxColumn Header="性别" SelectedItemBinding="{Binding Gerder}" ItemsSource="{Binding Source={StaticResource GerderEnumProvider}}"/>
              <DataGridTemplateColumn>
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <Grid>
                              <Button Content="编辑" Width="50"/>
                          </Grid>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
              <DataGridTemplateColumn>
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <TextBlock Text="{Binding Borthday}"/>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
                  <DataGridTemplateColumn.CellEditingTemplate>
                      <DataTemplate>
                          <DatePicker SelectedDate="{Binding Borthday,Mode=TwoWay}"/>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellEditingTemplate>
              </DataGridTemplateColumn>
             
          </DataGrid.Columns>
      </DataGrid>
  </Grid>
  public partial class MainWindow : Window
  {
      public MainWindow()
      {
          InitializeComponent();
      }

      private void Window_Loaded(object sender, RoutedEventArgs e)
      {
          ObservableCollection<Person> persons = new ObservableCollection<Person>();
          for (int i = 0; i < 10; i++)
          {
              persons.Add(new Person()
              {
                  Id = i,
                  Name = "Tom" + i,
                  Age = 18 + i,
                  Number = 100 + i,
                  Gerder=Gerder.M,
                  Description= " Description DescriptionDescription DescriptionDescription DescriptionDescription DescriptionDescription DescriptionDescription DescriptionDescription DescriptionDescription Description",
                  Borthday=DateTime.Now
              });
          }

          DgPersons.ItemsSource = persons;

          //Enum.GetValues(typeof(Gerder)).Cast<Gerder>().ToList();

      }

      private void DgPersons_LoadingRow(object sender, DataGridRowEventArgs e)
      {
          if (e.Row.DataContext is Person person)
          {
              if (person.Age > 20)
              {
                  e.Row.Background = Brushes.LightCoral;
              }
          }
      }

      private void DgPersons_SelectionChanged(object sender, SelectionChangedEventArgs e)
      {
          if(sender is DataGrid dataGrid)
          {
              int count= dataGrid.SelectedItems.Count;

              //如果对DataGrid进行增加或者删除操作的时候,一定要注意是否有排序信息,如果有先删掉,再操作
          }
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值