当前位置: 首页 > news >正文

WPF DataGrid columns表头根据数据集动态动态生成Demo

        思路是这样的,数组集合装表头的信息,遍历这个集合,遍历过程中处理一下数据,然后就把每表头信息添加到dataGrid2.Columns.Add(templateColumn);

1,页面Xaml代码:

  <DataGrid x:Name="dataGrid" ItemsSource="{Binding DataSource}" AutoGenerateColumns="False" ColumnHeaderHeight="30" RowHeight="30"/>

2,声明一个类:

public class TY_DataGridColumsHeader
{public string Name { get; set; }public object HeaderTitle { get; set; }public object IsVisible { get; set; }
}

3,声明表头数据集合,再遍历。 

#region 自己创建的DataGrid表头var dpDescriptor2 = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGrid.ItemsSourceProperty, typeof(DataGrid));ObservableCollection<TY_DataGridColumsHeader> listheadttile = new ObservableCollection<TY_DataGridColumsHeader>();listheadttile.Add(new TY_DataGridColumsHeader(){HeaderTitle = "名称",Name = "Name"});listheadttile.Add(new TY_DataGridColumsHeader(){HeaderTitle = "年龄",Name = "Age"});dpDescriptor2.AddValueChanged(dataGrid2, (s, e) => {dataGrid2.Columns.Clear();foreach (var item in listheadttile){var templateColumn = new DataGridTemplateColumn(){Header = item.HeaderTitle,CellTemplate = (DataTemplate)XamlReader.Parse(GetCellTemplateXaml2(item.Name))};dataGrid2.Columns.Add(templateColumn);}});#endregion

4,cell的模版 

public static string GetCellTemplateXaml2(string listheadttile){var templateStr = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">";//templateStr += "<Grid><Grid.ColumnDefinitions><ColumnDefinition Width=\"*\" /><ColumnDefinition Width=\"Auto\" /></Grid.ColumnDefinitions>";//templateStr += $"<UniformGrid Columns=\"{(hasFlag ? cellBindingList.Count - 1 : cellBindingList.Count)}\">";//cellBindingList.ForEach(a =>//{//    if (!hasFlag || a != cellBindingList.Last())//    {//        templateStr += "<TextBlock Margin=\"10 0 10 0\" Text=\"{Binding " + a + "}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" />";//    }//});//templateStr += "</UniformGrid>";//if (hasFlag)//{//    templateStr += "<TextBlock Grid.Column=\"1\" Text=\"{Binding " + cellBindingList.Last() + "}\" Width=\"50\" TextAlignment=\"Center\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" />";//}templateStr += "<Grid>";templateStr += "<TextBlock Margin=\"10 0 10 0\" Text=\"{Binding " + listheadttile + "}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" />";templateStr += "</Grid></DataTemplate>";return templateStr;}

http://www.lryc.cn/news/132032.html

相关文章:

  • 1339. 分裂二叉树的最大乘积
  • 【C++】Stack和Queue
  • Maven之tomcat7-maven-plugin 版本低的问题
  • 在项目中如何解除idea和Git的绑定
  • AGI 在网易云信的技术提效和业务创新
  • 线性代数的学习和整理9(草稿-----未完成)
  • React的useReducer与Reudx对比
  • 深度学习环境搭建 cuda、模型量化bitsandbytes安装教程 windows、linux
  • pythond assert 0 <= colx < X12_MAX_COLS AssertionError
  • js简介以及在html中的2种使用方式(hello world)
  • vsCode使用cuda
  • ubuntu无法使用apt命令时怎么安装库
  • 防火墙firewall
  • 拿来即用,自己封装的 axios
  • Hadoop小结(下)
  • 使用老北鼻AI免费GPT对话解决gun make安装和解析iso9660的问题
  • shell脚本语句
  • 【LeetCode】2235.两整数相加
  • springboot sl4j2 写入日志到mysql
  • 用 PyTorch 编写分布式应用程序
  • 空间分析专属 Python 学习资料
  • 2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境
  • vue入门
  • 区块链中slot、epoch、以及在slot和epoch中的出块机制,分叉原理(自己备用)
  • 免费开源的vue+express搭建的后台管理系统
  • 【开发】视频云存储EasyCVR视频汇聚平台AI智能算法定制
  • Ribbon:负载均衡及Ribbon
  • 【声波】声波在硼酸、硫酸镁 (MgSO4) 和纯水中的吸收研究(Matlab代码实现)
  • 使用swoole实现实时消息推送给客户端
  • Ordinals 之后,以太坊铭文协议 Ethscriptions 如何再塑 NFT 资产形态