首页 > 编程语言 >C# DataTable开发常用

C# DataTable开发常用

时间:2023-11-06 22:35:29浏览次数:30  
标签:常用 Rows C# Add DataRow new dt DataTable

DataTable

前言

从事ERP有一段时间了,最常用的集合 非DataTable莫属了。在数据量大的情况下,通常使用DataTable来缓存数据库中的表,下面介绍DataTable常用的方法(持续更新中)

简介

先介绍一下DataTable 的结构相信大家从名字也能看得出来 表格,类似我们常用的Excel 表格一样,但是没有Excel 那么复杂,就是简单的二维表格,更Mysql 中的表格类似。


常用的属性和方法

常用属性

CaseSensitive    指示表中的字符串比较是否区分大小写。 
      ChildRelations   获取此DataTable 的子关系的集合。 
      Columns          获取属于该表的列的集合。 
      Constraints      获取由该表维护的约束的集合。 
      DataSet          获取此表所属的DataSet。 
      DefaultView      获取可能包括筛选视图或游标位置的表的自定义视图。 
      HasErrors        获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。 
      MinimumCapacity  获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。 
      Rows             获取属于该表的行的集合。 
      TableName        获取或设置DataTable 的名称。

常用方法

  • BeginInit() 开始初始化在窗体上使用或由另一个组件使用的
  • DataTable。 初始化发生在运行时。
  • Clear() 清除所有数据的DataTable。
  • Clone() 克隆DataTable 的结构,包括所有DataTable 架构和约束。
  • EndInit() 结束在窗体上使用或由另一个组件使用的DataTable 的初 始化。初始化发生在运行时。
  • ImportRow(DataRow row) 将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。
  • Merge(DataTable table) 将指定的DataTable 与当前的DataTable 合并。
  • NewRow() 创建与该表具有相同架构的新DataRow。

常用的使用方法

1.创建

//创建一个空表
DataTable dt = new DataTable();
//创建一个名为"Table_New"的空表
DataTable dt = new DataTable("Table_New");
//DataTable(string tableName, string tableNamespace) 
//指定的表名和命名空间初始化DataTable类的新实例
DataTable dt = new DataTable("Table_New","Test");
1234567

2.添加列

DataColumn dc = new DataColumn();
//1.创建空列
dt.Columns.Add(dc);
//2.创建带列名和类型名的列(两种方式任选其一)
dt.Columns.Add("column0", System.Type.GetType("System.String"));
dt.Columns.Add("column0", typeof(String));
//3.通过列架构添加列
DataColumn dc = new DataColumn("column1",System.Type.GetType("System.DateTime"));
DataColumn dc = new DataColumn("column1", typeof(DateTime));
dt.Columns.Add(dc);
12345678910

3.添加行

//1.创建空行
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
//2.创建空行
dt.Rows.Add();
//3.通过行框架创建并赋值
dt.Rows.Add("张三",DateTime.Now);//Add里面参数的数据顺序要和dt中的列的顺序对应 
//4.通过复制dt2表的某一行来创建
dt.Rows.Add(dt2.Rows[i].ItemArray);
123456789

4.赋值取值

//新建行的赋值
DataRow dr = dt.NewRow();
dr[0] = "张三";//通过索引赋值
dr["column1"] = DateTime.Now; //通过名称赋值
//对表已有行进行赋值
dt.Rows[0][0] = "张三"; //通过索引赋值
dt.Rows[0]["column1"] = DateTime.Now;//通过名称赋值
//取值
string name=dt.Rows[0][0].ToString();
string time=dt.Rows[0]["column1"].ToString();
12345678910

5.筛选行

//选择column1列值为空的行的集合
DataRow[] drs = dt.Select("column1 is null");
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");
//DataTable.Select()方法里面支持简单的过滤和排序,不支持复杂的条件过滤和排序。里面的字符串必须是列名和数据,以及>,<,=,<>等关系运算符。
DataRow[] drs = dt.Select("column0 = '李四' and column0 = '1'");
12345678910

6.删除行

//使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[0]);
//使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt(0);
//使用DataRow.Delete()方法
dt.Row[0].Delete();
dt.AcceptChanges();
 
//-----区别和注意点-----
//Remove()和RemoveAt()方法是直接删除
//Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
  dt.Rows.RemoveAt(i);
}
1234567891011121314151617

7.复制表

//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
//复制表
DataTable dtNew = dt.Copy(); //复制dt表数据结构
dtNew.Clear() //清空数据
for (int i = 0; i < dt.Rows.Count; i++)
{
  if (条件语句)
  {
     dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行
  }
}
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行
123456789101112131415161718192021

8.表排序

DataTable dt = new DataTable();//创建表
dt.Columns.Add("ID", typeof(Int32));//添加列
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Age", typeof(Int32));
dt.Rows.Add(new object[] { 1, "张三" ,20});//添加行
dt.Rows.Add(new object[] { 2, "李四" ,25});
dt.Rows.Add(new object[] { 3, "王五" ,30});
DataView dv = dt.DefaultView;//获取表视图
dv.Sort = "ID DESC";//按照ID倒序排序
dv.ToTable();//转为表

标签:常用,Rows,C#,Add,DataRow,new,dt,DataTable
From: https://blog.51cto.com/lch411/8218298

相关文章

  • 207-nginx 或者tomcat报错:413 Request Entity Too Large
    http{#...client_max_body_size20M;#设置最大允许大小为20MB#...}tomcat413RequestEntityTooLarge<Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort=&quo......
  • ArcMap生成矢量面的外接圆或外接矩形
      本文介绍在ArcMap软件中,基于一个面图层,绘制其中面要素的最小外接矩形、最小外接圆等的方法。  首先,我们来看一下本文需要实现的需求。现有一个面要素图层,其中包含多个面要素,如下图所示。我们希望绘制这个面要素图层的最小外接矩形——既包括这个完整的面要素图层的最小外接......
  • A Tour Through TREE_RCU's Expedited Grace Periods (翻译)
    原文:https://www.kernel.org/doc/html/latest/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.htmlATourThroughTREE_RCU'sExpeditedGracePeriods通过TREE_RCU的加速宽限期进行一次旅行Introduction引言ThisdocumentdescribesRCU'sexpeditedgracep......
  • 2019-2020 ICPC, NERC, Northern Eurasia Finals
    组队打\(\rmICPC\),队友是\(\rmfishead\)和\(\rmLiang_Yusong\)。只过了五个题,还是太菜了。开局\(6\min\)我先把\(\rmB\)切了,然后\(\rmLYS\)在\(34\min\)时过了\(\rmE\)。这个时候\(\rmfishead\)切\(\rmL\),做法假了,罚时\(++\)。然后我开\(\rmD\),......
  • [ARC105E] Keep Graph Disconnected 题解
    题意给定一张由\(N\)个点和\(M\)条边组成的简单无向图\(G\),定义一个无向图是好的当且仅当这张图满足以下条件:\(1\)号节点和\(N\)号节点不联通图中不存在重边和自环现有两人轮流采取操作,每轮操作如下:选择两个点\(u,v\),将边\((u,v)\)加入图\(G\)中当一方无......
  • CF587E Duff as a Queen
    维护序列,支持:区间异或查询区间子集异或值种数(包含空集)\(n\le2\times10^5\),\(1\leq\le4\times10^4\),值域\([1,10^9]\),TL=7s.经典题。操作2相当于查询区间线性基大小。由于不能维护区间异或,作差分\(b_i=a_i\oplusa_{i-1}\)。可以得到\(a_i=\oplusb_1\oplu......
  • pyqt5-QScrollBar
    1、介绍这是一个进度条组件,两侧点击可以加减。 setMinimum(self,a0:int)设置最小值,可以是负值setMaximum(self,a0:int)设置最大值,可以是超过100设置浮点数时,保留其整数部分value(self)->int返回进度条的数值,int类型。默认时最小为0,最大为99。两侧点击,加减的......
  • OpenCV 最容易传错参数的两组Mat构造函数
    Mat构造函数中有两组函数传参特别容易传错,分别是:publicMat(introws,intcols,MatTypetype)publicMat(OpenCvSharp.Sizesize,MatTypetype)稍不注意,我们会认为下面两个mat尺寸相等,varm1=newMat(10,20,MatType.CV_8UC1);varm2=newMat(newOpenCvSharp.Size......
  • windows环境charles过期处理方法
    首先进行reset删除原来的证书 输入mmc->文件>添加删除管理单元->找到相关证书进行删除  重复安装证书,手机再次下载安装新证书即可......
  • Jackson反序列化漏洞研究
    一、Jackson序列化库使用简介0x1:Jackson背景Jackson是一个强大而高效的Java库,处理Java对象及其JSON表示的序列化和反序列化。它是这项任务中使用最广泛的库之一,并在许多其他框架中作为默认的Json引擎使用。例如,虽然Spring框架支持各种序列化/反序列化库,但Jackson是默认引擎。Ja......