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.pswp.cn/news/207432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207432.shtml
英文地址,請注明出處:http://en.pswp.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;…