WPF DataGrid控件的使用

下面以一个例子说明DataGrid控件的使用方法:

一、程序框架
使用了MVVM Light框架

二、主要代码部分(使用MVVM Light框架):
1.主窗体xaml代码 (MainWindow.xaml):

<Window x:Class="WpfApp2.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:WpfApp2"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="60"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><StackPanel Orientation="Horizontal" Grid.Row="0"><TextBlock Text="搜索条件:" VerticalAlignment="Center" Margin="10 0 0 0"></TextBlock><TextBox Width="200" Height="25" Margin="10 0 0 0" VerticalContentAlignment="Center" Text="{Binding Search}"></TextBox><Button Content="查找" Width="70" Height="25" Margin="10 0 0 0" Command="{Binding QueryCommand}"></Button><Button Content="重置" Width="70" Height="25" Margin="10 0 0 0" Command="{Binding ResetCommand}"></Button><Button Content="新增" Width="70" Height="25" Margin="10 0 0 0" Command="{Binding AddCommand}"></Button></StackPanel><DataGrid Grid.Row="1" ColumnWidth="*" AutoGenerateColumns="False" CanUserAddRows="False" Margin="10" ItemsSource="{Binding GridModelList}"><DataGrid.Columns><DataGridTextColumn Header="序号" Binding="{Binding Id}"/><DataGridTextColumn Header="姓名" Binding="{Binding Name}"/><DataGridTemplateColumn Header="操作"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanel Orientation="Horizontal"><Button Content="修改" Width="60" Height="25" Background="White" Foreground="Black" CommandParameter="{Binding Id}" Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"></Button><Button Content="删除" Width="60" Height="25" Background="AliceBlue" Foreground="Red" CommandParameter="{Binding Id}" Command="{Binding DataContext.DelCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"></Button></StackPanel></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid></Grid>
</Window>

2.ViewModel类代码(MainViewModel.cs):

public class MainViewModel : ViewModelBase{public MainViewModel(){mylocalDB = new localDB();QueryCommand = new RelayCommand(Query);ResetCommand = new RelayCommand(()=>{Search = string.Empty;this.Query();});EditCommand = new RelayCommand<int>(t => Edit(t));DelCommand = new RelayCommand<int>(t => Del(t));AddCommand = new RelayCommand(Add);}localDB mylocalDB;private string search = string.Empty;public string Search{get { return search; }set { search = value;RaisePropertyChanged(); }}private ObservableCollection<Student> gridModelList;public ObservableCollection<Student> GridModelList{get { return gridModelList; }set { gridModelList = value;RaisePropertyChanged(); }}#region Commandpublic RelayCommand QueryCommand { get; set; }public RelayCommand ResetCommand { get; set; }public RelayCommand<int> EditCommand { get; set; }public RelayCommand<int> DelCommand { get; set; }public RelayCommand AddCommand { get; set; }#endregionpublic void Query(){var models = mylocalDB.GetStudentsByName(Search);GridModelList = new ObservableCollection<Student>();if(models != null){models.ForEach(arg =>{GridModelList.Add(arg);});}}public void Edit(int id){var model = mylocalDB.GetStudentById(id);if(model != null){UserView view = new UserView(model);var res = view.ShowDialog();if(res.Value){var newModel =GridModelList.FirstOrDefault(t=>t.Id == model.Id);if(newModel != null){newModel.Name = model.Name;}}}}public void Add(){Student stu = new Student();UserView view = new UserView(stu);var res = view.ShowDialog();if (res.Value){stu.Id = gridModelList.Max(t => t.Id) + 1; ;mylocalDB.AddStudent(stu);this.Query();}}public void Del(int id){var model = mylocalDB.GetStudentById(id);if (model != null){var res = MessageBox.Show($"确认删除当前用户:{model.Name}?","操作提示:",MessageBoxButton.OK,MessageBoxImage.Question);if(res == MessageBoxResult.OK){mylocalDB.DelStudent(model.Id);}this.Query();}}}

3.主窗体后台代码(MainWindow.xaml.cs):

public partial class MainWindow : Window{public MainWindow(){InitializeComponent();MainViewModel viewModel = new MainViewModel();viewModel.Query();this.DataContext = viewModel;}}

4.Student类:

public class Student:ViewModelBase{private int id;private string name;public int Id{get { return id; }set {id = value;RaisePropertyChanged();}}public string Name{get { return name; }set{name = value;RaisePropertyChanged();}}}

5.localDB类(这里充当数据库功能)

public class localDB{public localDB(){Init();}private List<Student> students;private void Init(){students = new List<Student>();for (int i = 0; i < 30; i++){students.Add(new Student(){Id = i,Name = $"Sample{i}"}) ;}}public List<Student> GetStudents(){return students;}//新增public void AddStudent(Student stu){students.Add(stu);}//删除public void DelStudent(int id){var model = students.FirstOrDefault(t => t.Id == id);if(model!=null){students.Remove(model);}}public List<Student> GetStudentsByName(string name){return students.Where(q=>q.Name.Contains(name)).ToList();}public Student GetStudentById(int id){var model = students.FirstOrDefault(t=>t.Id == id);if(model != null){return new Student() { Id = model.Id,Name = model.Name};}return null;}}

三、运行效果:

其他示例一:
如果不用MVVM,DataGrid中的按钮也可以Tag来绑定数据,用事件触发:

 <DataGrid Grid.Row="1" Name="grd" ItemsSource="{Binding FailLists}" Margin="10" HorizontalContentAlignment="Center" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserReorderColumns="False" LoadingRow="Grd_LoadingRow" HeadersVisibility ="Column"><DataGrid.Columns><DataGridTemplateColumn Header="No." Width="40"><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Header}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTextColumn Header="测试项路径" Width="*" Binding="{Binding FailPath}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTemplateColumn Header="操作" Width="120"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanel Orientation="Horizontal"><!--<Button Content="Run" Width="40" Height="20" Margin="5 0 10 0" Background="#3CB371" Foreground="White" CommandParameter="{Binding PrjPath}" Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"></Button>--><Button Name="btn_IDERun" Content="IDE运行" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Header}"  Width="60" Height="20" Margin="2 0 0 0" Style="{StaticResource btnCheck}" Background="#3CB371" Cursor="Hand" Foreground="White" Click="Btn_IDERun_Click"/><Button Name="btn_ErrView" Content="LOG" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Header}"  Width="40" Height="20" Margin="3 0 0 0" Style="{StaticResource btnCheck}" Background="#FF9900" Cursor="Hand" Foreground="White" Click="Btn_ErrView_Click"/></StackPanel></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTextColumn Header="结果" Width="50" Binding="{Binding TestResult}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle_1}"/></DataGrid.Columns></DataGrid>

样式资源:

 <Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}"><!--<Setter Property="HorizontalAlignment" Value="Center" />--><Setter Property="VerticalAlignment" Value="Center" /></Style><Style x:Key="DataGridTextColumnCenterSytle_1" TargetType="{x:Type TextBlock}"><Setter Property="HorizontalAlignment" Value="Center" /><Setter Property="VerticalAlignment" Value="Center" /><Setter Property="FontWeight" Value="Bold"/><Style.Triggers><DataTrigger Binding="{Binding TestResult}" Value="Pass"><Setter Property="Foreground"  Value="Green"></Setter></DataTrigger><DataTrigger Binding="{Binding TestResult}" Value="Fail"><Setter Property="Foreground" Value="Red"></Setter></DataTrigger></Style.Triggers></Style>

其他实例二:
(显示部分按钮)

<Grid Grid.Row="2" Margin="10 0 10 10"><DataGrid Name="grd" ItemsSource="{Binding JumpLists}" Margin="0,4" Grid.Row="1" FontSize="12"AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserReorderColumns="False" HeadersVisibility="Column"><DataGrid.Columns><!--<DataGridTextColumn Header="系列" Width="100" Binding="{Binding Series}" CanUserResize="False" CanUserSort="False"/>--><DataGridTextColumn Header="芯片" Width="100" Binding="{Binding ChipName}"  ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Header="封装" Width="100" Binding="{Binding Package}"  ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Header="跳线方式" Width="170" Binding="{Binding JumpMode}"  ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Header="跳线板短接点" Width="*" Binding="{Binding Jmup7Short}"  ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTemplateColumn Header="短接图" Width="90"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanel Name="sp_Func" Orientation="Horizontal"><Button Name="btn_SV03" Content="SV03" Width="35" Height="20" Margin="5 0 5 0" Style="{StaticResource Select_btn}" CommandParameter="{Binding Jmup7Short}" Command="{Binding DataContext.SV03Command,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}" Click="Btn_SV03_Click"></Button><Button Name="btn_SV04" Content="SV04" Width="35" Height="20" Style="{StaticResource Select_btn}" CommandParameter="{Binding Jmup7Short}" Command="{Binding DataContext.SV04Command,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}" Click="Btn_SV04_Click"></Button></StackPanel><DataTemplate.Triggers><DataTrigger Binding="{Binding ViewPart}" Value="True"><Setter Property="Visibility" Value="Visible"/></DataTrigger><DataTrigger Binding="{Binding ViewPart}" Value="False"><Setter Property="Visibility" Value="Collapsed"/></DataTrigger></DataTemplate.Triggers></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid></Grid></Grid>

其他实例三:

<DataGrid ItemsSource="{Binding ProductsList}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserSortColumns="False"CanUserResizeColumns="False" CanUserReorderColumns="False" HeadersVisibility="Column" AlternationCount="2" IsReadOnly="True"><DataGrid.ColumnHeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="BorderThickness" Value="1"></Setter><Setter Property="Background" Value="#FFE699"></Setter><Setter Property="FontSize" Value="16"/><Setter Property="Height" Value="30"/><!--设置边框笔刷(BorderBrush)--><Setter Property="BorderBrush"><!--值--><Setter.Value><!--色刷,Opacity:透明度--><SolidColorBrush Color="#333" Opacity="0.1"></SolidColorBrush></Setter.Value></Setter></Style></DataGrid.ColumnHeaderStyle><DataGrid.RowStyle><Style TargetType="{x:Type DataGridRow}"><Style.Triggers><Trigger Property="ItemsControl.AlternationIndex"Value="0"><Setter Property="Background" Value="#FFFFFFFF" /></Trigger><Trigger Property="ItemsControl.AlternationIndex"Value="1"><Setter Property="Background" Value="#FFC5E0B3" /></Trigger></Style.Triggers></Style></DataGrid.RowStyle><DataGrid.Columns><DataGridTextColumn Width="120" Header="产品名称" Binding="{Binding Name}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Width="90" Header="触控通道" Binding="{Binding Pins}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Width="90" Header="输出型态" Binding="{Binding Out}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Width="100" Header="封装" Binding="{Binding Package}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Width="*" Header="功能描述" Binding="{Binding Describe}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTextColumn Width="100" Header="校验码" Binding="{Binding Checksum}" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/><DataGridTemplateColumn Header="文档下载" Width="80"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><Button Name="bt_downPDK" Style="{StaticResource down_btn}" Width="20" Height="20" Cursor="Hand" Tag="{Binding Name}" Click="Bt_downPDK_Click" ><Button.Background><ImageBrush ImageSource="Images/download.png"/></Button.Background></Button><TextBlock Name="tb_line" Text="-" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center"/></Grid><DataTemplate.Triggers><DataTrigger Binding="{Binding Download}" Value="true"><Setter TargetName="bt_downPDK" Property="Visibility" Value="Visible"/><Setter TargetName="tb_line" Property="Visibility" Value="Collapsed"/></DataTrigger><DataTrigger Binding="{Binding Download}" Value="false"><Setter TargetName="bt_downPDK" Property="Visibility" Value="Collapsed"/><Setter TargetName="tb_line" Property="Visibility" Value="Visible"/></DataTrigger></DataTemplate.Triggers></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid>

WPF DataGrid控件的使用相关推荐

  1. WPF DataGrid控件样式

    WPF DataGrid控件样式 <DataGrid ItemsSource="{Binding ProductsList}" AutoGenerateColumns=&qu ...

  2. C# WPF DataGrid控件的详细介绍和推荐一些样式设计

    前面介绍过使用DataGrid简单绑定一个数据模型,接着介绍DataGrid的一些详细操作. 参考:C# WPF DataGrid的使用 定制DataGrid控件基本外观属性 RowBackgroun ...

  3. WPF Datagrid控件

    ObservableCollection<Model> Name= new ObservableCollection<Model>();首先以此方式实例化一个集合 ((this ...

  4. WPF 4 DataGrid 控件(基本功能篇)

    提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中DataGrid 的相关功能. 自定义列 默认情况下,当我们为Da ...

  5. 详解WPF 4 DataGrid控件的基本功能

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 详解WPF 4 D ...

  6. WPF(5)WPF之DataGrid控件

    系列文章目录 WPF(1)WPF工程创建 WPF(2)WPF之Image组件 WPF(3)WPF之Button组件 文章目录 系列文章目录 前言 一.DataGrid入门? 1.1 CanUserAd ...

  7. WPF之DataGrid控件使用

    WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...

  8. WPF 自定义DataGrid控件样式

    WPF 自定义DataGrid控件样式 样式一: 样式代码: <!--DataGrid样式--><Style TargetType="DataGrid">& ...

  9. 有关WPF中DataGrid控件的基础应用总结

    基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...

最新文章

  1. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.3 架构设计中的重要概念...
  2. python3官方说明文档_接下来? · Python3.7.3官方文档 简体中文 · 看云
  3. 实训项目2Linux基本命令,实训项目2 Linux文件系统管理
  4. python与办公自动化-用 Python 自动化办公,我与大神之间的差距一下就拉小了
  5. 做过这个NLP项目的面试通过率高达 90%!!
  6. Microsoft Hyper-V Server 2008 R2和SCVMM2012部署XenDesktop 5.6桌面虚拟化系列之二准备虚拟桌面模板...
  7. weblogic作为linux服务器,weblogic在linux服务器上部署应用
  8. 三、主流区块链技术特点及Hyperledger Fabric V1.0版本特点
  9. Java基础 - 变量的定义和使用
  10. 公司采购 流程flowable例子
  11. 洛谷 P2678 [NOIP2015提高组] 跳石头(二分答案)
  12. 凸优化第八章几何问题 8.4极值体积椭圆
  13. Scala快速入门到精通 视频教程 百度云网盘下载地址
  14. 工厂车间现场管理必备利器,MES生产管理系统
  15. python爬虫+数据分析之NBA球员LBJ13个赛季的数据分析
  16. word公式编辑器出错及交叉引用问题
  17. 联盟显示服务器异常,玩英雄联盟ping值异常,我们如何检测网络问题,还是服务器?...
  18. python是动态语言图片_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...
  19. Fragment 可见性监听方案 - 完美兼容多种 case
  20. 斐波那契数列算法c语言实现

热门文章

  1. codeforce1673C. Palindrome Basis
  2. 国产ssh连接工具FinalShell简单的使用教程
  3. android 自定义progressdialog,自定义ProgressDialog
  4. java计算机毕业设计ssm+vue红联小区果蔬销售网站-水果购物商城
  5. 商标设计的基本要求和四大禁忌
  6. 51Nod 1674——区间的价值 V2
  7. ssm+java茶楼管理系统mwozt(程序+lw+源码+远程部署)
  8. 真无线蓝牙耳机哪款好用?真无线蓝牙耳机排行榜
  9. SQL Server快速生成SQL增删改查语句
  10. 2021年安全员-B证(江西省)考试APP及安全员-B证(江西省)考试试卷