C#动态操作DataTable(新增行、列、查询行、列等)

简介: 方法一:动态创建一个DataTable ,并为其添加数据 public void CreateTable()        {            //创建表            DataTable dt = new DataTable();                        //1、添加列            dt.

方法一:动态创建一个DataTable ,并为其添加数据

public void CreateTable()
        {
            //创建表
            DataTable dt = new DataTable();
            
            //1、添加列
            dt.Columns.Add("Name", typeof(string)); //数据类型为 文本

            //2、通过列架构添加列
            DataColumn age = new DataColumn("Age", typeof(Int32));   //数据类型为 整形
            DataColumn Time = new DataColumn("Time", typeof(DateTime)); //数据类型为 时间
            dt.Columns.Add(age);
            dt.Columns.Add(Time);

            //1、添加空行
            DataRow dr1 = dt.NewRow();
            dt.Rows.Add(dr1);

            //2、添加空行
            dt.Rows.Add();

            //3、添加数据行
            DataRow dr2 = dt.NewRow();
            dr2[0] = "张三"; //通过索引赋值
            dr2[1] = 23;
            dr2["Time"] = DateTime.Now;//通过名称赋值
            dt.Rows.Add(dr2);

            //4、通过行框架添加
            dt.Rows.Add("李四",25,DateTime.Now);//Add你们参数的数据顺序要和dt中的列顺对应

        }

方法二:为已有DateTable添加一新列,其值可设为默认值,也可设这列不可为空。

        public void CreateTable(DataTable vTable)
        {
            //为已有DataTable添加一新列
            DataColumn dc1 = new DataColumn("Tol", typeof(string));
            vTable.Columns.Add(dc1);

            //添加一新列,其值为默认值
            DataColumn dc2 = new DataColumn("Sex", typeof(string));
            dc2.DefaultValue = "男";
            dc2.AllowDBNull = false;//这在初床表的时候,其作用,在为已有表新增列的时候,不起作用
            vTable.Columns.Add(dc2);
        }

方法三:筛选DataTable中的数据,使用 Select()方法,把赛选结果可以保存到 DataRow[] drArr; 数据里面,也可以另存为一个新DataTable

       public void SelectRowDataTable()
        {
            DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件
                {
                    //进行操作
                }
            }
            //但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?就是dt.Select(),上面的操作可以改成这样:

            DataRow[] drArr = dt.Select("C1='abc'");//查询(如果Select内无条件,就是查询所有的数据)

            //还可以这样操作:
            DataRow[] drArr1 = dt.Select("C1 LIKE 'abc%'");//模糊查询(如果的多条件筛选,可以加 and 或 or )
            DataRow[] drArr2 = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另一种模糊查询的方法
            DataRow[] drArr3 = dt.Select("C1='abc'", "C2 DESC");//排序

            //问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到: 
            DataTable dtNew1 = dt.Clone();
            for (int i = 0; i < drArr.Length; i++)
            {
                dtNew1.Rows.Add(drArr[i]);
            }
            
            //但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了: 
            DataTable dtNew2 = dt.Clone();
            for (int i = 0; i < drArr.Length; i++)
            {
                dtNew2.ImportRow(drArr[i]);//ImportRow 是复制
            }
        }

方法四:对DataTable筛选指定字段,并保存为新表

        public void SelectColumnDataTable(DataTable dt)
        {
            //对DataTable筛选指定字段,并保存为新表
            DataTable dtNew = dt.DefaultView.ToTable(false, new string[] { "列名", "列名", "列名" });//这些列名,确保dt中存在,否则会报错误
        }

方法五:对DataTable进行排序设置(sort)

        public void SortDataTable(DataTable dt)
        {
            dt.DefaultView.Sort = "id desc";//重新设置排序
            DataTable dtNew = dt.DefaultView.ToTable(); //保存在一张新表中
        }

相关文章
|
6月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
158 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
6月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
1月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
15 1
|
2月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
90 15
|
6月前
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
514 0
|
6月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之GroupBy分组查询
本篇文章我们将演示LINQ扩展包基础语法里的GroupBy分组查询,并实现投影等实际操作中常用的类型转换手法。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
260 0
|
6月前
|
C# 索引
C# | 【完全开源】手机号码归属地查询,一秒内百万次查询
这个开源项目是一个.NET库,可以通过手机号码获取号码归属地信息,包括运营商、国家、省份、城市、邮政编码、区号等信息。 该库加载了一个包含46万条数据的“中国手机号归属地信息”数据集,并实现了高速查询。在我的7年老笔记本上执行一百万次查询耗时不足一秒。
295 0
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
422 0
|
开发框架 .NET 编译器
C# Lambda表达式和linq表达式 之 匿名对象查询接收
C# Lambda表达式和linq表达式 之 匿名对象查询接收
|
C# Windows
C# DataTable导出PDF,解决引入中文字体失败的问题
C# DataTable导出PDF,解决引入中文字体失败的问题