2021-08-12 WPF控件专题 DataGrid控件详解

2021-08-12 WPF控件专题 DataGrid控件详解1 DataGrid 控件介绍 DataGrid 简介 MultiSelecto 条目控件网格控件 可以自定义网格显示的数据的控件自定义网格 列的形式 ListView 类似网格控件 GridViewGrid DataTemplate 常用属性 RowHeaderTem 行标题模板 CanUserAddRo 是否添加新行 IsReadOnly 是否可以编辑其中的值 Ve

1.DataGrid控件介绍

DataGrid简介 :MultiSelector Selector ItemsControl —条目控件
网格控件:可以自定义网格显示的数据的控件
自定义网格:列的形式,




ListView:类似网格控件:GridView GridViewColumn –CellTemplate—DataTemplate

常用属性
RowHeaderTemplate 行标题模板
CanUserAddRows 是否添加新行
IsReadOnly 是否可以编辑其中的值
VerticalScrollBarVisibility/HorizontalScrollBarVisibility 垂直/水平滚动条的显示
CurrentItem 当前单元格的行绑定的数据项
CanUserDeleteRows 是否可以删除行 Delete 移除当前选择的行
RowStyle / CellStyle 行/单元格 样式
HeadersVisibility 行和列头的可见性
AlternatingRowBackground 交替行上使用的背景画笔 2 1 whIte 2 lightBlue white lightblue
GridLinesVisibility 显示哪些网格线
VerticalGridLinesBrush/HorizontalGridLinesBrush 垂直/水平网格线画笔
RowHeaderWidth 行标题宽度 ColumnHeaderHeight 列标题高度 RowHeight 行高
AutoGenerateColumns 是否自动创建列 false
SelectionUnit/SelectionMode 选择单元(单元格、行或两者)/单选或多选




























DataGrid中的列

2.具体案例

<Window x:Class="WpfAppTest.DataGridWindow" 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:WpfAppTest" mc:Ignorable="d" Title="DataGridWindow" Height="450" Width="600" Loaded="Window_Loaded"> <Grid> <DataGrid HeadersVisibility="All" AutoGenerateColumns="False" CanUserAddRows="False" IsReadOnly="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" AlternationCount="3" RowHeaderWidth="20" GridLinesVisibility="All" SelectionUnit="FullRow" SelectionMode="Extended" Background="White" Name="dgList" ItemsSource="{Binding UserList}" > <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" Value="Transparent"/> <Style.Triggers> <Trigger Property="ItemsControl.AlternationIndex" Value="0"> <Setter Property="Background" Value="LightGray"/> </Trigger> <Trigger Property="ItemsControl.AlternationIndex" Value="1"> <Setter Property="Background" Value="LightBlue"/> </Trigger> <Trigger Property="ItemsControl.AlternationIndex" Value="2"> <Setter Property="Background" Value="Orange"/> </Trigger> </Style.Triggers> </Style> </DataGrid.RowStyle> <DataGrid.Columns> <DataGridTextColumn Header="编号" Binding="{Binding UserId}" Width="50"/> <DataGridTextColumn Header="姓名" Binding="{Binding UserName}" Width="80"> <DataGridTextColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding}" Foreground="Red"/> </DataTemplate> </DataGridTextColumn.HeaderTemplate> </DataGridTextColumn> <DataGridCheckBoxColumn Header="状态" Binding="{Binding UserState}" Width="50"/> <DataGridComboBoxColumn Header="部门" SelectedValueBinding="{Binding DeptId}" Width="100" DisplayMemberPath="DeptName" SelectedValuePath="DeptId" > <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.DeptList,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/> </Style> </DataGridComboBoxColumn.ElementStyle> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.DeptList,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/> </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn> <DataGridTemplateColumn Header="年龄" Width="50" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding UserAge}" Foreground="Green" Background="LightBlue"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox Text="{Binding UserAge}"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window> 
///  /// 获取用户信息列表 ///  /// 
    private List<UserInfoNew> GetUserList() { 
    List<UserInfoNew> list = new List<UserInfoNew>(); string sql = "select UserId,UserName,UserState,UserAge,DeptId from UserInfos where DeptId>0"; SqlDataReader dr = SqlHelper.ExecuteReader(sql, 1); while (dr.Read()) { 
    UserInfoNew user = new UserInfoNew(); user.UserId = (int)dr["UserId"]; user.UserName = dr["UserName"].ToString(); user.UserState = (int)dr["UserState"] == 1 ? true : false; user.UserAge = (int)dr["UserAge"]; user.DeptId = (int)dr["DeptId"]; list.Add(user); } dr.Close(); return list; } ///  /// 获取部门列表 ///  /// 
    private List<DeptInfo> GetDepts() { 
    List<DeptInfo> list = new List<DeptInfo>(); string sql = "select DeptId,DeptName from DeptInfos"; SqlDataReader dr = SqlHelper.ExecuteReader(sql, 1); while (dr.Read()) { 
    DeptInfo dept = new DeptInfo(); dept.DeptId = (int)dr["DeptId"]; dept.DeptName = dr["DeptName"].ToString(); list.Add(dept); } dr.Close(); return list; } private void Window_Loaded(object sender, RoutedEventArgs e) { 
    //首先,设置comboBox列的数据源  //colDept.DisplayMemberPath = "DeptName"; //colDept.SelectedValuePath = "DeptId"; //colDept.ItemsSource = GetDepts(); //如果没有设置列的Name属性 //DataGridComboBoxColumn deptCol = dgList.Columns[3] as DataGridComboBoxColumn; //deptCol.ItemsSource = GetDepts(); //dgList.ItemsSource = GetUserList(); //初始化DGVModel DGVModel vmodel = new DGVModel(); vmodel.UserList = GetUserList(); vmodel.DeptList = GetDepts(); this.DataContext = vmodel; } } public class UserInfoNew { 
    public int UserId { 
    get; set; } public string UserName { 
    get; set; } public bool UserState { 
    get; set; } public int UserAge { 
    get; set; } public int DeptId { 
    get; set; } } public class DeptInfo { 
    public int DeptId { 
    get; set; } public string DeptName { 
    get; set; } } ///  /// Window的数据上下文 ///  public class DGVModel { 
    public List<UserInfoNew> UserList { 
    get; set; } public List<DeptInfo> DeptList { 
    get; set; } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226603.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:33
下一篇 2026年3月16日 下午10:33


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号