C#實現的Table的Merge,以及實現Table的Copy和Clone

来源:https://www.cnblogs.com/wml-it/archive/2020/01/17/12204838.html

C#實現的對兩個Table進行Merge,兩表必須存在至少一個公共欄位作為連接項,否則連接就失去了意義。如下是對兩個table進行Merge的詳細代碼: private void button1_Click(object sender, EventArgs e)//Button點擊觸發事件 { #r ...


C#實現的對兩個Table進行Merge,兩表必須存在至少一個公共欄位作為連接項,否則連接就失去了意義。如下是對兩個table進行Merge的詳細代碼:

 private void button1_Click(object sender, EventArgs e)//Button點擊觸發事件
        {
            #region  Table的Merge
            DataTable dt = new DataTable();

            DataTable dt1 = new DataTable();//創建Table1
            dt1.Columns.Add("ID", typeof(string));
            dt1.Columns.Add("NAME",typeof(string));
            dt1.Columns.Add("AGE", typeof(int));
            dt1.Columns.Add("SEX", typeof(string));

            dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"]};
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt1.NewRow();
                dr["ID"] = "00" + i.ToString();
                dr["NAME"] = "00-" + i.ToString();
                dr["AGE"] = 15 + i;
                dr["SEX"] = "M";
                dt1.Rows.Add(dr);

            }
            dt = dt1;

            DataTable dt2 = new DataTable();//創建Table2
            dt2.Columns.Add("ID", typeof(string));
            dt2.Columns.Add("NAME", typeof(string));
            dt2.Columns.Add("Course",typeof(string));
            dt2.Columns.Add("Score",typeof(int));

            dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] };
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt2.NewRow();
                dr["ID"] = "00" + i.ToString();
                dr["NAME"] = "00-" + i.ToString();
                dr["Course"] ="C#";
                dr["Score"] = i + 80;
                dt2.Rows.Add(dr);
            }
            dt = dt2;
            dt1.Merge(dt2);

            //Copy
            var table1 = dt1.Copy();//Copy,複製表的結構以及數據
            //添加新的一行
            DataRow dr1 = table1.NewRow();
            dr1["ID"] = "005";
            dr1["NAME"] = "00-5";
            dr1["AGE"] = 15;
            dr1["SEX"] = "F";
            table1.Rows.InsertAt(dr1,2);//表的指定位置插入新增加的一行     
              
            table1.Columns.Add(new DataColumn() { ColumnName = "Memo", DataType = typeof(string) });//默認插入到最後一列
            table1.Columns["Memo"].SetOrdinal(0);//把插入的列移動到第一行

            int memoIndex = table1.Columns.IndexOf("Memo");//獲取列的位置信息
            var isContainName = table1.Columns.Contains("NAME");//判斷table中是否存在某列

            List<string> columnsNameList = new List<string>();//遍歷獲取table的所有列名
            foreach (DataColumn col in table1.Columns)
            {
                columnsNameList.Add(col.ColumnName);
            }

            table1.Columns.RemoveAt(memoIndex);//通過列名的索引進行移除
            table1.Columns.RemoveAt(2);//通過列名的索引進行移除

            table1.Columns.Remove("SEX");//通過列名進行移除,建議使後者
           

            string[] name = new string[table1.Rows.Count];//方法一:對錶中的數據進行遍歷輸出
            string[] id = new string[table1.Rows.Count];
            for (int i = 0; i < table1.Rows.Count; i++)
            {
                name[i] = table1.Rows[i]["NAME"].ToString();
                id[i] = table1.Rows[i]["ID"].ToString();
            }
                      
            table1.Clear();//清空表中的數據

            //Clone
            var table2 = dt2.Clone();//Clone,複製表的結構、約束信息

            #endregion

        }

您的分享是我們最大的動力!

更多相關文章
  • C#實現的Check Password,並根據輸錯密碼的次數分情況鎖定賬戶:如果輸入錯誤3次,登錄賬戶鎖定5分鐘並提示X點X分後重試登錄。如果5分鐘後再次輸入,累計輸入錯誤密碼累計達到5次。則賬戶會被永久鎖定,需聯繫系統管理員進行把資料庫中的輸入錯誤的次數(errorcount)進行清零解鎖才能登陸 ...
  • [TOC] MVC "MVC 維基百科,自由的百科全書" MVC 是軟體工程的一種軟體架構模式,它不是具體的技術,而是一種代碼分層的理念,主要體現了職責分離原則。 M Model 模型 V View 視圖 C Controller 控制器 對 MVC 的誤解及緣由 誤解:頁面視圖 = View ,E ...
  • 簡介 Orleans用起來的確很爽,更爽的是咱們有能監控它的工具。 " OrleansDashboard " 這個工具是一個可視化的Silo監控工具,Silo和Grain的活躍狀態一目瞭然,各個介面的響應速度也可以很清晰的統計到。 安裝 使用NuGet引用 然後修改 的配置,添加Dashboard: ...
  • Teigha中實體旋轉 代碼: using (var trans = database.TransactionManager.StartTransaction()) { Entity ent = trans.GetObject(entityId, OpenMode.ForWrite) asEntit ...
  • 什麼是AutoMapper?AutoMapper是一個簡單的小型庫,用於解決一個看似複雜的問題 - 擺脫將一個對象映射到另一個對象的代碼。這種類型的代碼是相當沉悶和無聊的寫,所以為什麼不發明一個工具來為我們做? 我們來看看在.netcore3.1中怎樣使用AutoMapper9.0。 Profile ...
  • 程式處理存放圖片的幾種方式 我的理解有4個: 1:放在項目本身得文件夾中,直接部署到伺服器上 2:存放在磁碟中,然後資料庫中存放路徑,讀取得時候傳路徑。這個適合小項目 3:將圖片轉換成二進位文件,但是不建議這樣做,因為會給資料庫造成壓力。 4:存放在雲存儲器上,也是在資料庫上存地址,不過是雲地址,使 ...
  • 第一部分:面向對象 封裝 繼承(里氏轉換) 多態第二部分:值類型、引用類型、字元串操作第三部分:集合文件操作第四部分:正則表達式第五部分:XML操作第六部分:委托、事件第七部分:反射。 //存儲著我們當前正在運行的進程//Process[] pro = Process.GetProcesses(); ...
  • 在很多時候,我們做一些非常規化的界面的時候,往往需要創建一些用戶控制項,在其中繪製好一些基礎的界面塊,作為後續重覆使用的一個單元,用戶控制項同時也可以封裝處理一些簡單的邏輯。在開發Winform各種類型項目,我都時不時需要定製一些特殊的用戶控制項,以方便在界面模塊中反覆使用。我們一般是在自定義的用戶控制項里... ...
一周排行
  • 1. 泛型Generic 1.1 引入泛型:延遲聲明 泛型方法聲明時,並未寫死類型,在調用的時候再指定類型。 延遲聲明:推遲一切可以推遲的。 1.2 如何聲明和使用泛型 泛型方法:方法名稱後面加上尖括弧,裡面是類型參數 類型參數實際上就是一個類型T聲明,方法就可以用這個類型T了。 如下所示: pub ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7903617.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第三個模式--迭代器模式,先從名字上來看。迭代是遍歷的意思,迭代器可以理解為是遍歷某某的工具,遍歷什麼呢?在軟 件設 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7928521.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第四個模式--觀察者模式,先從名字上來看。觀察者模式可以理解為既然有“觀察者”,那肯定就有“被觀察者”了。“觀察者” ...
  • 先看核心代碼: public List<DataEntity> SearchShopSalesReport(DateTimeOffset? dateFrom, DateTimeOffset? dateTo,string groupBy) { var query = data.DataEntity / ...
  • 首先新建一個項目,名稱叫Caliburn.Micro.ActionConvertions 然後刪掉MainWindow.xaml 然後去app.xaml刪掉StartupUri這行代碼 其次,安裝Caliburn.Micro,Caliburn.Micro.Core,這兩個Nuget包,如下圖 然後新 ...
  • 一文帶你瞭解 C DLR 的世界 在很久之前,我寫了一片文章 "dynamic結合匿名類型 匿名對象傳參" ,裡面我以為DLR內部是用反射實現的。因為那時候是心中想當然的認為只有反射能夠在運行時解析對象的成員信息並調用成員方法。後來也是因為其他的事一直都沒有回過頭來把這一節知識給補上,正所謂亡羊補牢 ...
  • ​ 在C#8.0中,針對介面引入了一項新特性,就是可以指定預設實現,方便對已有實現進行擴展,也對面向Android和Swift的Api進行互操作提供了可能性。下麵我們來看看該特性的具體規則與實現。 一、主要應用場景: 在不破壞影響已有實現的情況下,可以添加新成員。這解決了在第三方已經大量使用了的介面 ...
  • 前言 通常在應用程式開發到正式上線,在這個過程中我們會分為多個階段,通常會有 開發、測試、以及正式環境等。每個環境的參數配置我們會使用不同的參數,因此呢,在ASP.NET Core中就提供了相關的環境API,方便我們更好的去做這些事情。 環境 ASP.NET Core使用ASPNETCORE_ENV ...
  • 擱置了幾天,工作忙的一塌糊塗,今天終於抽空來繼續看看MVC的知識。先來看看MVC的路由是如何處理的。以下為替代的路由: app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{ ...
  • 多用www.bing.com國際版解決代碼報錯 代碼運行的時候,報異常,國內的搜索引擎一搜, 浮誇的廣告太多,解決方案准確性不足, 盜版又很嚴重(導致一錯皆錯),方案未及時更新等詬病。 www.bing.com國際版可以關聯到: (1). 外國官網,可以獲得官方的解決方案。 (2). stackov ...
x