WPF DataGrid 动态增加列

方式一:通过DataGrid 数据源即DataTable,在DataTable里面动态增加了列之后,重新构造每一行数据,设置DataGrid.ItemsSource = null; 然后再重新设置ItemsSource到DataTable

 public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}int newColumnIndex = 1;private void AddColum_Click(object sender, RoutedEventArgs e){DataTable dt = (DataGridtest.ItemsSource as DataView).ToTable();if (DataGridtest.ItemsSource == null){return;}dt.Columns.Add(new DataColumn("New Column" + newColumnIndex++));for (int i = 0; i < dt.Rows.Count; i++){dt.Rows[i][dt.Columns.Count - 1] = i.ToString() + " - New Column";}DataGridtest.ItemsSource = null;DataGridtest.ItemsSource = dt.DefaultView;}private void ShowClomun_Click(object sender, RoutedEventArgs e){DataTable dt = new DataTable();for (int i = 0; i < 100; i++){dt.Columns.Add(new DataColumn(string.Format("{0}{1}", "Colum", i)));}DataRow dr;for (int i = 0; i < 200; i++){dr = dt.NewRow();for (int columIndex = 0; columIndex < dt.Columns.Count; columIndex++)dr[columIndex] = i.ToString() + " - " + columIndex.ToString();dt.Rows.Add(dr);}DataGridtest.ItemsSource = dt.DefaultView;}
}

方式二:通过ObservableCollection<dynamic>集合,它可以动态的添加属性,这种类型添加好属性之后,重新设置DataGrid的ItemsSource绑定即可

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Dynamic;
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 DynymicDataGrid
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}List<string> header = new List<string>();ObservableCollection<dynamic> items = new ObservableCollection<dynamic>();public MainWindow(){InitializeComponent();for (int i = 0; i < 100; i++){header.Add("Colum" + i);}}int newColumnIndex = 1;private void AddColum_Click(object sender, RoutedEventArgs e){foreach (ExpandoObject item in items){dynamic x = item;x.NewColumn = "NewColumn";}DataGridtest.Columns.Add(new DataGridTextColumn() { Header = "NewColumn", Binding = new Binding("NewColumn") });newColumnIndex++;}private void ShowClomun_Click(object sender, RoutedEventArgs e){for (int i = 0; i < 100; i++){dynamic item = new ExpandoObject();foreach (var vheader in header){item.A1 = "A value - " + i.ToString();item.A2 = "A value - " + i.ToString();item.A3 = "A value - " + i.ToString();item.A4 = "A value - " + i.ToString();item.A5 = "A value - " + i.ToString();item.A6 = "A value - " + i.ToString();item.A7 = "A value - " + i.ToString();item.A8 = "A value - " + i.ToString();item.A9 = "A value - " + i.ToString();item.A10 = "A value - " + i.ToString();item.A10 = "A value - " + i.ToString();item.A12 = "A value - " + i.ToString();item.A13 = "A value - " + i.ToString();item.A14 = "A value - " + i.ToString();item.A15 = "A value - " + i.ToString();item.A16 = "A value - " + i.ToString();item.A17 = "A value - " + i.ToString();item.A18 = "A value - " + i.ToString();item.A19 = "A value - " + i.ToString();item.A20 = "A value - " + i.ToString();item.A21 = "A value - " + i.ToString();item.A22 = "A value - " + i.ToString();item.A23 = "A value - " + i.ToString();item.A24 = "A value - " + i.ToString();item.A25 = "A value - " + i.ToString();item.A26 = "A value - " + i.ToString();item.A27 = "A value - " + i.ToString();item.A28 = "A value - " + i.ToString();item.A29 = "A value - " + i.ToString();item.A30 = "A value - " + i.ToString();item.A31 = "A value - " + i.ToString();item.A32 = "A value - " + i.ToString();item.A33 = "A value - " + i.ToString();item.A34 = "A value - " + i.ToString();item.A35 = "A value - " + i.ToString();item.A36 = "A value - " + i.ToString();item.A37 = "A value - " + i.ToString();item.A38 = "A value - " + i.ToString();item.A39 = "A value - " + i.ToString();item.A40 = "A value - " + i.ToString();item.A41 = "A value - " + i.ToString();item.A42 = "A value - " + i.ToString();item.A43 = "A value - " + i.ToString();item.A44 = "A value - " + i.ToString();item.A45 = "A value - " + i.ToString();item.A46 = "A value - " + i.ToString();item.A47 = "l value - " + i.ToString();item.A48 = "A value - " + i.ToString();item.A49 = "A value - " + i.ToString();item.A50 = "A value - " + i.ToString();item.A51 = "A value - " + i.ToString();item.A52 = "A value - " + i.ToString();item.A53 = "A value - " + i.ToString();item.A54 = "A value - " + i.ToString();item.A55 = " A value - " + i.ToString();item.A56 = " A value - " + i.ToString();item.A57 = " A value - " + i.ToString();item.A58 = " A value - " + i.ToString();item.A59 = " A value - " + i.ToString();item.A60 = " A value - " + i.ToString();item.A61 = " A value - " + i.ToString();item.A62 = " A value - " + i.ToString();item.A63 = " A value - " + i.ToString();item.A64 = " A value - " + i.ToString();item.A65 = " A value - " + i.ToString();item.A66 = " A value - " + i.ToString();item.A67 = " A value - " + i.ToString();item.A68 = " A value - " + i.ToString();item.A69 = " A value - " + i.ToString();item.A70 = " A value - " + i.ToString();item.A71 = " A value - " + i.ToString();item.A72 = " A value - " + i.ToString();item.A73 = " A value - " + i.ToString();item.A74 = " A value - " + i.ToString();item.A75 = " A value - " + i.ToString();item.A76 = " A value - " + i.ToString();item.A77 = " A value - " + i.ToString();item.A78 = " A value - " + i.ToString();item.A79 = "A value - " + i.ToString();item.A80 = "A value - " + i.ToString();item.A81 = " A value - " + i.ToString();item.A82 = " A value - " + i.ToString();item.A83 = " A value - " + i.ToString();item.A84 = " A value - " + i.ToString();item.A85 = " A value - " + i.ToString();item.A86 = " A value - " + i.ToString();item.A87 = " A value - " + i.ToString();item.A88 = " A value - " + i.ToString();item.A89 = " A value - " + i.ToString();item.A90 = " A value - " + i.ToString();item.A91 = " A value - " + i.ToString();item.A92 = " A value - " + i.ToString();item.A93 = " A value - " + i.ToString();item.A94 = " A value - " + i.ToString();item.A95 = " A value - " + i.ToString();item.A96 = " A value - " + i.ToString();item.A97 = " A value - " + i.ToString();item.A98 = " A value - " + i.ToString();item.A99 = "A value - " + i.ToString();}items.Add(item);}for (int i = 0; i < 40; i++){DataGridtest.Columns.Add(new DataGridTextColumn() { Header = "A" + i, Binding = new Binding("A" + i) });}DataGridtest.ItemsSource = items;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础系列】Cron表达式入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

优秀案例 | 元宇宙双语财经科技主播“舒望”主持首届粤港澳大湾区元宇宙国际传播论坛

12月6日&#xff0c;由南方财经全媒体集团指导、大湾区元宇宙国际传播实验室(GBA MIC Lab&#xff09;主办、南财国际传播中心和21世纪经济报道共同承办&#xff0c;以“多元共创开放共享”为主题的首届粤港澳大湾区元宇宙国际传播论坛在广州隆重开幕。 “立足湾区&#xff0c;…

Kubernetes - 为什么 K8S 在容器里不能调用自己?

问题描述 最近遇到一个神奇的现象&#xff0c;在 K8S 的 POD 容器中&#xff0c;比如 pod name&#xff1a;mini-appnamespace&#xff1a;devport&#xff1a;5050 那么&#xff0c;是无法在 mini-app 容器里执行以下命令&#xff0c;如果执行&#xff0c;会一直卡在这条命…

一文详解Java单元测试Junit

文章目录 概述、Junit框架快速入门单元测试概述main方法测试的问题junit单元测试框架优点&#xff1a;使用步骤&#xff1a; 使用案例包结构 Junit框架的常见注解测试 概述、Junit框架快速入门 单元测试概述 就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;…

ROS rosbag

在ROS中的rosbag是一个命令行工具&#xff0c;主要用于记录、回放和分析rostopic中的数据。它可以将指定rostopic中的数据记录到.bag后缀的数据包中&#xff0c;以便于进行离线分析和处理。 在ROS系统中&#xff0c;rosbag可以通过命令行工具或ROS节点来使用。 通过rosbag命令…

数字图像处理(实践篇)十九 漫水填充

目录 一 漫水填充算法--FloodFill 二 涉及的函数 三 实践 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是选中与种子点相连接的区域&#xff0c;利用指定颜色进行区域颜色填充。可以通过设置连通方式或像素的范围控制填充的效果。通常是用来标记或者分离图像的一部…

进程地址空间

引入地址空间 静态变量和栈空间变量 静态变量默认是被初始化的 存放在初始化和为初始化空间中 static已经变成了全局变量 命令行参数和环境变量的增长方向 这里观察的是命令行参数和环境变量的地址 观察命令行和环境变量表的地址 进程地址空间 如果他们是同一块儿空间&am…

Ubuntu22.04 交叉编译fdk-aac for Rv1106

一、下载fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、编译 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

软件测试——集成测试

集成测试是在单元测试之后&#xff0c;将各个独立单元&#xff08;通常是已经通过单元测试的模块或组件&#xff09;组合在一起&#xff0c;测试它们在一起协同工作的过程。以下是进行集成测试的一般步骤和最佳实践&#xff1a; 1. 明确定义集成测试的目标 确定集成测试的目标…

麒麟v10 数据盘初始化 gpt分区

麒麟v10 数据盘初始化 gpt分区 1、查看磁盘 lsblk2 、分区 parted2.1、 设置磁盘分区形式2.2、 设置磁盘的计量单位为磁柱2.3、 分区2.4、 查看分区 3、分区格式化4、 挂载磁盘4.1、新建挂载目录4.2、挂载磁盘4.3、查看挂载结果 5、设置开机自动挂载磁盘分区5.1、 查询磁盘分区…

ClamAV开源病毒库使用例子

ClamAV是一个开源的反病毒引擎&#xff0c;用于检测恶意软件和病毒。ClamAV提供了一个名为cl_scanfile的函数&#xff0c;用于扫描单个文件是否包含病毒。以下是一个使用cl_scanfile函数的示例代码&#xff1a; 首先&#xff0c;确保已经安装了ClamAV库。在Debian/Ubuntu系统中…

用AI来纠正错别字和修饰文字

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在使用谷歌翻译或百度翻译将英语翻译成中文时&#xff0c;有些句子读起来不太流畅。我尝试使用AI来帮助我修改翻译后的中文&#xff0c;希望能让句子更符合中文习惯。 使用百度文心一言尝试一下。 文心一言的链接是这个&#x…

VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符

1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墙服务配置

从 RHEL/CentOS 7开始&#xff0c;使用新的防火墙服务——firewalld。这里介绍该防火墙服务的基本用法 一、防火墙服务管理&#xff1a;从 RHEL/CentOS 7开始采用Systemd作为新的系统管理器&#xff0c;而systemctl则是Systemd中用于管理服务的命令 # 启动防火墙服务 systemct…

谷歌Gemini刚发就惹质疑:测试标准有失偏颇,效果视频疑似剪辑

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 谷歌憋了许久的大招&#xff0c;双子座Gemini大模型终于发布&#xff01;其中一图一视频最引人注目&#xff1a; 一图&#xff0c;MMLU多任务语言理解数据集测试&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

OpenGL学习资料

1.学习网站 Song Ho Ahn LearnOpenGL GAMES101:现代计算机图形学入门 OpenGL 官网 2.书籍 Fundamentals of computer graphics OpenGL ES 3.0编程指南 计算机图形学(OpenGL版)第3版 3.参考的一些文章 颜色缓冲区 深度缓冲 VBO&#xff0c;VAO和EBO详解 深入探索透视投影变…

实战干货!基于ERNIE Bot SDK的数字诗人聊天开发教程

随着人工智能技术的不断迭代发展&#xff0c;数字人的开发与应用需求也与日俱增&#xff0c;并且随着大语言模型的发展&#xff0c;数字人也更智能&#xff0c;从最初的语音预制到现在的实时交流&#xff0c;目前已在很多场景都有广泛应用。 虚拟客服&#xff1a;数字人可以通…

Mysql自动备份脚本(本地备份、远程备份、删除冗余备份)

Mysql自动备份脚本&#xff08;本地备份、远程备份、删除冗余备份&#xff09; 1. 脚本功能 自动备份mysql数据到服务器上&#xff0c;可以通过linux的 crontab定义备份周期。 自动删除七天前的备份数据。 2. 脚本内容 #!/bin/bash # auth Eric source /etc/profile # 设…

【EMNLP 2023】基于知识迁移的跨语言机器阅读理解算法

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队、达摩院自然语言处理团队合作在自然语言处理顶级会议EMNLP2023上发表基于机器翻译增加的跨语言机器阅读理解算法X-STA。通过利用一个注意力机制的教师来将源语言的答案转移到目标语言的答案输出空间&#x…

计算机网络高频面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…