精华内容
下载资源
问答
  • wpf的datagrid用法
    千次阅读
    2020-10-24 21:33:06

    1. 前言

    • 此篇博客是为了记录在写WPF前段时遇到的一个问题,以及其解决方案。
    • 问题描述:
      前端表格数据存于Datagrid表格中,此表格于其他表格相互关联,需要将所有表格数据进行全部导出和部分导出,则需要 ①添加复选框 增加全选功能 ② 读取每行的复选框 进行判断
      由于没有学习过WPF,对于这个数据类型很陌生,所以查了很多资料,并记录下,方便今后使用的时候进行查找。

    2. Datagrid

    介绍

    • 来自官方的介绍:
      命名空间: System.Windows.Controls
      程序集: PresentationFramework.dll
      表示用于在可自定义的网格中显示数据的控件。
      public class DataGrid : System.Windows.Controls.Primitives.MultiSelector
      
    • 其功能强大,可以包括很多数据类型在其中,故存储采用object类型。

    使用

    • 前端添加Datagrid表格项
     <!--表头样式-->
    <DataGrid.ColumnHeaderStyle>
    	<Style TargetType="DataGridColumnHeader">
            <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
            <Setter Property="Background" Value="Transparent"></Setter>
            <Setter Property="Foreground" Value="black"></Setter>
            <Setter Property="BorderThickness" Value="0.8" />
            <Setter Property="BorderBrush" Value="#17acae" />
            <Setter Property="FontSize" Value="18" />
        </Style>
    </DataGrid.ColumnHeaderStyle>
    
    	<!-- 绑定数据列  Bingding-->
    	<DataGridTextColumn Header="证件号"  Binding="{Binding number}"/>
    	<DataGridTextColumn Header="注册日期"  Binding="{Binding register_time}"/>
    	<DataGridTextColumn Header="姓名"  Binding="{Binding name}"/>
    	<DataGridTextColumn Header="年龄"  Binding="{Binding age}"/>
    	<DataGridTextColumn Header="备注"  Binding="{Binding remark}"/>
    	</DataGrid.Columns>
    </DataGrid>
    
    • 后端增加绑定数据
    //定义数据类
    public class patient_form
        {
            public string patient_id { get; set; }
            public string number { get; set; }
            public string name { get; set; }
            public string age { get; set; }
            public string race { get; set; }
            public string sex { get; set; }
            public string register_time { get; set; }
            public string weight { get; set; }//体重
            public string education { get; set; }//教育
            public string work { get; set; }//工作
            public string genetic_history { get; set; }//遗传病史
            public string disease_history { get; set; }
            public string smoking { get; set; }
            public string drinking { get; set; }
            public string diatary { get; set; }
            public string nature { get; set; }
            public string remark { get; set; }
        }
    public Patient_Manager(int doctor_id)
    {
    	//前面内容省略
        ObservableCollection<patient_form> tmp_show = new ObservableCollection<patient_form>();
    	DataGrid_Info.ItemsSource = tmp_show;   //将数据传入前端的Datagrid中  赋值操作
    }
    

    2. 对Datagrid的行和列进行操作

    • 增加列:dt.Columns.Add(dataGrid.Columns[i].Header.ToString());
    • 新建行:System.Data.DataRow row = dt.NewRow();
    • 给行赋值:row[columnsIndex] = (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString();
    • 把行加入到Datagrid: dt.Add(row);
    • 获取datatable的指定行指定列数据:
      对象形式获取获取组件:
    object item = DataGrid_Info.CurrentCell.Item;
    //然后获取DataGridTemplateColumn单元格元素
    FrameworkElement element = this.DataGrid_Info.Columns[0].GetCellContent(this.DataGrid_Info.Items[i]);
    

    string类型获取: DataGridTemplateColumn templeColumn = DataGrid_Info.Columns[0] as DataGridTemplateColumn;

    • 按照行 对Datagrid进行遍历
      for(int i = 0;i < Datagrid.Items.Count; ++i)
    • 按照列 对Datagrid进行遍历
    for(int i=0;i<Datagrid.Items.count;++i)
    {
    	for(int j=0;j<Datagrid.columns.count;++j)
    	{
    		string str = dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString();//获取i行j列的数据
    	}
    }
    

    2.1 为子列表增加CheckBox

    • 前端代码
    <DataGrid.RowStyle></DataGrid.RowStyle>   <!-- 表格行样式-->
    	<DataGrid.CellStyle></DataGrid.CellStyle>  <!-- 表格单元格样式-->
    	
                <DataGrid.Columns>       <!-- 在最前面增加一列  全选按钮 作为header-->
                    <DataGridTemplateColumn Header="选择" x:Uid="">  <!-- 标题栏-->
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <CheckBox Click="CheckAll_Click" >全选</CheckBox>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
    
                        <DataGridTemplateColumn.CellTemplate>      <!-- 每行数据栏都增加一个复选框-->
                            <DataTemplate>
                            	<!-- 对象的名称 用于后面获取对象 设置默认不选中 -->
                                <CheckBox  Name="IsChecked" IsChecked="False">选择</CheckBox>   
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
    
    • 控制全选 <— .CS文件中的函数
    private void CheckAll_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show((All_Click_Tag == true) ? "全部设置为非选中!!" : "全部设置为选中!!");
                All_Click_Tag = !All_Click_Tag;
                CheckBox checkbox;
                for (int row = 0; row < DataGrid_Info.Items.Count; ++row)//遍历行
                {
    
                    //首先获取DataGridTemplateColumn所在列
                    DataGridTemplateColumn templeColumn = DataGrid_Info.Columns[0] as DataGridTemplateColumn;
    
                    if (templeColumn == null) continue;
                    //MessageBox.Show(templeColumn == null ? "templeColumn为空" : "templeColumn不为空");
                    object item = DataGrid_Info.CurrentCell.Item;
                    //然后获取DataGridTemplateColumn单元格元素
                    FrameworkElement element = this.DataGrid_Info.Columns[0].GetCellContent(this.DataGrid_Info.Items[row]);
                    //MessageBox.Show(element == null ? "element为空" : "element不为空");
                    //MessageBox.Show("找checkbox");
                    checkbox = (CheckBox)templeColumn.CellTemplate.FindName("IsChecked", element);//出问题
                    checkbox.IsChecked = All_Click_Tag;
                }
            }
    
    更多相关内容
  • wpf-DataGrid用法

    2022-01-21 15:08:47
    DataGrid x:Name="DataGrd_FeelerPin_List" ItemsSource="{Binding GridModelList}" AutoGenerateColumns="False" CanUserAddRows="False" SelectionUnit="Cell" EnableRowVirtualization="True" ...
     <DataGrid x:Name="DataGrd_FeelerPin_List" ItemsSource="{Binding GridModelList}"
                    AutoGenerateColumns="False"
        			CanUserAddRows="False"
        			SelectionUnit="Cell"
        			EnableRowVirtualization="True"
        			GridLinesVisibility="All"
                    CanUserResizeColumns="False"
                    CanUserResizeRows="False"
                    ColumnHeaderHeight="30">
                        <DataGrid.Columns>
                            
                            <DataGridTextColumn Header="序号" 
        					Binding="{Binding ID}"                                        
        					CanUserReorder="False" 
        					IsReadOnly="True" Width="35" 
        					TextBlock.TextAlignment="Center"/>
                            
                            <DataGridTextColumn Header="HF" 
        					Binding="{Binding HF}"                                        
        					CanUserReorder="False" 
        					IsReadOnly="False" Width="*" 
        					TextBlock.TextAlignment="Center"/>
                            
                            <DataGridTextColumn Header="HS" 
        					Binding="{Binding HS}"                                        
        					CanUserReorder="False" 
        					IsReadOnly="True" Width="*" 
        					TextBlock.TextAlignment="Center"/>
                            
                            <DataGridTextColumn Header="LF" 
        					Binding="{Binding LF}"                                        
        					CanUserReorder="False" 
        					IsReadOnly="False" Width="*" 
        					TextBlock.TextAlignment="Center"/>
                            
                            <DataGridTextColumn Header="LS" 
        					Binding="{Binding LS}"                                        
        					CanUserReorder="False" 
        					IsReadOnly="False" Width="*" 
        					TextBlock.TextAlignment="Center"/>
                        </DataGrid.Columns>
                    </DataGrid>
    

    自动产生行
    AutoGenerateColumns=“False”
    让用户添加列
    CanUserAddRows=“False”
    选中时是单元格
    SelectionUnit=“Cell”
    使用行虚拟化,节省资源,实时创对和销毁行对UI对象
    EnableRowVirtualization=“True”
    显示网格线类型:全部、横线、竖线、无线
    GridLinesVisibility=“All”
    用户调整行宽度
    CanUserResizeColumns=“False”
    用户调整列宽度
    CanUserResizeRows=“False”

    在这里插入图片描述

    展开全文
  • WPF DataGrid 基本使用

    2022-05-22 15:13:17
    1. 设计DataGrid展示的数据模型类 public class Song{  public int Id { get; set; }  public string Title { get; set; }  public string Artist { get; set; }  public bool IsSoundtrack { ...

    效果如下:

    1. 设计DataGrid展示的数据模型类

    public class Song
    {
    
      public int Id { get; set; }
      public string Title { get; set; }
      public string Artist { get; set; }
      public bool IsSoundtrack { get; set; }
      public string MovieTitle { get; set; }
      public Genre Genre { get; set; }
      public DateTime ReleaseDateTime { get; set; }
      public Uri URL { get; set; }
    }
    

    创建枚举类型

    public enum Genre
    {
    
      HeavyMetal, HardRock, SoftRock, ClassicRock, Rock, Pop, PopSoul, Soul, Blues, Jazz, RB, Country, Folk, Funk,Classical, ChristmasCarol, Classic
    
    }
    

    2. 创建模型的数据集合

    用来展示在UI的DataGrid中

    public class Songs
    {
    
      public List<Song> songList { get; set; } = GetSongs();
      public static List<Song> GetSongs()
      {
    
        var file = System.IO.Path.Combine($"{ AppDomain.CurrentDomain.BaseDirectory}", "songs.txt");
    
        var lines = File.ReadAllLines(file);
        var list = new List<Song>();
        for (int i = 0; i < lines.Length; i++)
        {
    
          try
          {
    
              var line = lines[i].Split(',');
              var temp = line[2].Split(' ', '&', '-');
              var gr = temp.Length > 1 ? temp[0] + temp[1] : temp[0];
    
               var song = new Song()
              {
    
                  Id = int.Parse(line[0]),
                  Title = line[1],
                  Artist = line[3],
                  IsSoundtrack = line[4].Trim() == "Unknown" ? false : true,
                  MovieTitle = line[4],
                 Genre = (Genre)Enum.Parse(typeof(Genre), gr),
                 URL = new Uri($"www.{line[3]}.com", UriKind.Relative),
           		 ReleaseDateTime = DateTime.Parse(line[5] + ",01,01")
            };
              list.Add(song);
        }
      catch (Exception ex)
     {
        throw new Exception(ex.Message);
    }
      }
        return list;
    }
    

    3.UI添加数据绑定

    添加DataContent

    <Window.DataContext>
      <local:Songs/>
    </Window.DataContext>
    

    添加Resource

    <Window.Resources>
    
      <Style TargetType="DataGridColumnHeader">
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="FontWeight" Value="DemiBold"/>
          <Setter Property="Background" Value="Black"/>
          <Setter Property="Foreground" Value="White"/>
        </Style>
    
        <Style TargetType="DataGridCell">
          <Setter Property="BorderBrush" Value="Gainsboro"/>
                <Setter Property="BorderThickness" Value="3"/>
          </Style>
    </Window.Resources>
    

    数据绑定

    <Grid>
    
    <DataGrid x:Name="DG" ItemsSource="{Binding songList}"
                      HorizontalGridLinesBrush="Blue"
                      VerticalGridLinesBrush="Green"
                      GridLinesVisibility="None"
                      CanUserAddRows="False"
                      CanUserSortColumns="True"
                      CanUserReorderColumns="False"
                      IsReadOnly="False"
                      CanUserResizeColumns="True"
                      CanUserResizeRows="True"
                      SelectionUnit="FullRow"
                      RowBackground="AliceBlue"
                      AlternatingRowBackground="LightGreen"
                      FlowDirection="LeftToRight"
                      FontSize="18"
                      FrozenColumnCount="3"
    
                     >
    
        </DataGrid>
    </Grid>
    
      
    

    其中的属性可以做修改,再运行验证效果是如果变化的,加深对属性的理解。

    展开全文
  • WPF DataGrid简单使用

    2022-05-09 13:19:12
    1.创建 DataGrid <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="15,195,0,0" ...在WPF中对DataGrid控件的列名设置是非常简单方便的,跟WPF的所有控件都一样可以对某个元素的独立控

    1.创建 DataGrid

     <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="15,195,0,0" VerticalAlignment="Top" Height="320" Width="400" AutoGenerateColumns="False">
       </DataGrid>
    

    2.列名设置
    在WPF中对DataGrid控件的列名设置是非常简单方便的,跟WPF的所有控件都一样可以对某个元素的独立控制 ,所以对DataGrid的列名设置也不例外,我们到<DataGrid.Columns>进行设置即可。

      <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="15,195,0,0" VerticalAlignment="Top" Height="320" Width="400" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="80" />
                    <DataGridTextColumn Header="性别" Binding="{Binding SaturationAmout}" Width="80" />
                    <DataGridTextColumn Header="年龄" Binding="{Binding RealTimeAmout}" Width="80"/>
                    <DataGridTextColumn Header="生日" Binding="{Binding SumAmout}" Width="150"/>
                </DataGrid.Columns>
            </DataGrid>
    

    在 中的 Header 就是设置的列名了,如: Header=“实时数据”
    在这里插入图片描述

    3.数据绑定

    ---------------------------------------------前台代码----------------------------------------------

    (1)在资源视图xml文件的DataGrid,并设置绑定。

     <DataGrid x:Name="DATA_GRID" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="15,195,0,0" VerticalAlignment="Top" Height="320" Width="400" AutoGenerateColumns="False" BorderBrush="#FF96B8D8" IsSynchronizedWithCurrentItem="False" SelectionChanged="DATA_GRID_SelectionChanged" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Width="80" Binding="{Binding name}"/>
                    <DataGridTextColumn Header="性别" Width="80" Binding="{Binding sex}"/>
                    <DataGridTextColumn Header="年龄" Width="80" Binding="{Binding age}"/>
                    <DataGridTextColumn Header="生日" Width="150" Binding="{Binding birthday}"/>
                </DataGrid.Columns>
            </DataGrid>
    

    ItemsSource=“{Binding}” 和Binding=“{Binding name}” Binding="{Binding sex}"进行数据绑定,其中name和age是对应的属性名。
    (2)如果要让DataGridComboBoxColumn中下拉列表的内容为制定枚举类型的内容,则要指定静态资源。这样,整个xaml文件应进行设置:

      Title="我的窗口" Height="577" Width="839" Loaded="LoadData">
    

    其中LoadData是添加数据的方法名。

    ---------------------------------------------后台代码----------------------------------------------

    (3)在项目中创建一个people类,并写get,set方法。

    //people类
    public class people
    {
        public string name { get; set; }
        public string sex { get; set; }
        public string age { get; set; }
        public string birthday { get; set; }
    }
    
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        //创建people数组
       ObservableCollection<people> peopleList = new ObservableCollection<people>();
        public MainWindow()
        {
            InitializeComponent();
        }
    

    注意:如果不写get,set,数据将不会加载到DataGrid中
    (4)实现数据添加

    //创建dataGrid数据
    private void LoadData(object sender, RoutedEventArgs e)
    {
        peopleList.Add(new people()
        {
            name = "小明",
            age = "18",
            sex = "男",
            birthday = "1990-9-9"
        });
        peopleList.Add(new people()
        {
            name = "小红",
            age = "18",
            sex = "女",
            birthday = "1990-9-9"
        });
        //((this.FindName("DATA_GRID")) as DataGrid).ItemsSource = peopleList;
        DATA_GRID.ItemsSource = peopleList;
    }
    

    在这里插入图片描述

    展开全文
  • Gu.Wpf.DataGrid2D WPF DataGrid的附加属性,可以绑定到不同类型的源。 为了使用DataGrid2D您需要在XAML中添加xmlns:dataGrid2D="http://gu.se/DataGrid2D" 内容 Selected.CellItem和索引 ItemsSource....
  • WPFDataGrid控件使用

    千次阅读 2021-01-24 12:32:16
    WPFDataGrid控件使用一、DataGrid简介二、DataGrid数据源绑定三、DataGrid单元格编辑三、DataGrid增加删除行参考文档 一、DataGrid简介 二、DataGrid数据源绑定 三、DataGrid单元格编辑 要实现对DataGrid单元格...
  • WPFDataGrid使用实例

    千次阅读 2021-10-06 14:31:52
    WPFDataGrid使用实例 以下是使用效果: TIPS:新建Main2.xmal、Main.xmal.cs文件 1.WPF前台代码 <Label Grid.Column="0" Grid.Row="0" Content="---------所有商品数据---------"></Label> &...
  • WPF DataGrid 表头筛选

    2022-06-05 17:24:00
    WPF DataGrid 表头筛选 DataGridExtensions
  • WPF DataGrid 数据绑定

    千次阅读 2022-03-31 17:54:25
    初学WPF,目前就知道这个用法,废话不多说,直接上界面 MainWindow.xaml <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=...
  • C#WPFDataGrid用法

    热门讨论 2012-06-06 09:10:39
    结合实例很好的讲解了DataGrid中数据绑定,与数据操作即增删改查,还有分页功能。适合初学者快速的掌握DataGrid 的典型应用
  • WPF DataGrid控件的使用

    2020-10-13 22:14:27
    下面以一个例子说明DataGrid控件的使用方法: 一、程序框架 二、主要代码部分(使用MVVM Light框架): 1.主窗体xaml代码 (MainWindow.xaml): <Window x:Class="WpfApp2.MainWindow" xmlns=...
  • WPF DataGrid 重复单击行
  • WPF DataGrid提供了许多功能,但也有许多限制和非常陡峭的学习曲线。编写自己的代码以在行和列中显示数据非常容易,只需要几十行代码。因此,如果您在使用DataGrid时遇到问题,或者不想花几天时间学习如何格式化它,...
  • wpf datagrid

    2015-06-20 19:45:51
    一部分代码被我不小心删了,没备份。哭,还没写完,不想重写,我是新手一名,新人的话可以拿去读读。嘿嘿,bug多多,勿喷。这验证码也是醉了,9438,晕。
  • c# WPF DataGrid 获取选中单元格信息

    千次阅读 2021-01-11 19:32:55
    } } WPF DataGrid 获取选中 一行 或者 多行 WPFDataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作 然而SelectedItem 与SelectedItems DataGrid的SelectionU ... 【转】WPF DataGrid 获取选中的...
  • 由于对WPF数据绑定不很熟悉,对ObserveCollection等内容没有太多时间去研究,只能用一些取巧的办法了。设置DataGrid的数据源,只要修改ItemsSource属性就可以了,如下:List dataList = newList()datagrid1....
  • WPF DataGrid 添加数据 与 删除数据

    千次阅读 2020-08-28 08:38:30
    <DataGrid ItemsSource="{Binding}" x:Name="DataGrid1" Grid.Row="0" FontSize="12" HorizontalAlignment="Left" Margin="20...将DataGrid命名为DataGrid1,给后面调用的时候使用。 using System; using System...
  • WPF DataGrid 获取选中 一行 或者 多行

    千次阅读 2020-12-18 19:26:49
    WPFDataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作然而SelectedItem与SelectedItemsDataGrid的SelectionUnit跟SelectionMode两个属性的取值不同时有变化一:当DataGrid.SelectionUnit == ...
  • WPF DataGrid 使用ComboBox

    2020-05-09 09:39:59
    写这个的时候,在网上搜索了很多都没办法达到自己预期的效果,现在自己亲自试验过后一...DataGrid DockPanel.Dock="Top" ItemsSource="{Binding SettingDataList}" AutoGenerateColumns="False" CanUserSortColumns
  • WPF中,如果DataGrid使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况。解决方法就是在Binding的时候给UpdateSourceTrigger赋值。 <RowDefinition Height=25></RowDefinition> ...
  • WPF可过滤DataGrid,多语言 从基础DataGrid控件类继承并重写某些方法以实现过滤器的DataGrid控件对于自动或自定义生成的每个列(如Excel)。 使用以下语言翻译标签和日期格式:英语,法语,俄语,德语,意大利语,...
  • 出人意料的是,从代码中更改某些WPF DataGrid数据后遇到许多挑战,这些代码要求对行进行新的排序并滚动DataGrid以显示最初选择的行。本文重点介绍遇到的问题以及如何解决。最后是完整的示例代码。 介绍 我正在使用...
  • 原写法是这样的 <ContextMenu StaysOpen="true"> <MenuItem Header="删行"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <
  • WPFDataGrid的空白行使用方法

    热门讨论 2014-04-04 20:32:09
    DataGrid中空白行使用方法代码 博文地址:http://blog.csdn.net/rabbitsoft_1987/article/details/22949955
  • 前台代码声明: 前台使用: 后台代码: using IMOS.Common.Helpers; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading...
  • dgList.SelectionUnit = DataGridSelectionUnit.FullRow;dgList.SelectionMode = ...WPFDataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作然而SelectedItem 与SelectedItems DataGrid的Sele...
  • 文章目录扩展类库源码用法效果源代码基本思路 扩展类库源码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using...
  • Datagrid中显示行号,如果你绑定的datacontext中没有序号,又想要显示序号的时候,可以按照本文的方法显示喽~效果如下图:来看看代码吧~MainWindow.xaml<...
  • WPF DataGrid使用

    千次阅读 2019-02-20 10:44:19
    最近在使用WPF写一套系统,期间用到DataGrid显示数据记录,对DataGrid使用方法在此简单的做一个记录 &lt;DataGrid Grid.Row="1" AlternationCount="2" AutoGenerateColumns="...
  • WPF(5)WPFDataGrid控件

    千次阅读 2022-04-09 12:50:56
    例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、DataGrid入门?1.1 CanUserAddRows属性1.2 Grid 中的多余的空列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,853
精华内容 1,141
关键字:

wpf的datagrid用法