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筛选指定字段,并保存为新表。这些字段,确保dt中存在,否则会报错误 DataTable dtNew = dt.DefaultView.ToTable(false, new string[] { "列名", "列名", "列名" });
}

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

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

关于对已经绑定的DataSet的排序的问题:

DataSet ds=new DataSet();

DataView dv=new DataView();

dv.Table=ds.Tables[0];

dv.Sort="CreateTime desc";

GridView.DataSource=dv;

就可以实现对dataset的排序了。

DataTable 排序

DataRow[] rows = dataTable1.Select("", "ord asc");

DataTable t = DataTable1.Clone();

t.Clear();

foreach (DataRow row in rows)

t.ImportRow(row);

DataTable1 = t;

VS2005中这种方法最简单:

DataView dv = dt.DefaultView;

dv.Sort = "c1 Asc";

DataTable dt2 = dv.ToTable();

============================

【追加】排序的好方法

dt.DefaultView.Sort = "ID ,Name

--改变DateTable字段数据类型:

//新表

DataTable newDt = new DataTable();

List listColums = new List();

//复制表结够

newDt = dwtb.Clone();

//新表中的列数据类型为Decmail的改为string

foreach (DataColumn col in newDt.Columns)

{

listColums.Add(col.ColumnName);

if (col.DataType.FullName == "System.Decimal")

{

col.DataType = Type.GetType("System.String");

}

if (col.DataType.FullName == "System.Int32")

{

col.DataType = Type.GetType("System.String");

}

}

    foreach (DataRow row in dwtb.Rows)
{
DataRow newDtRow = newDt.NewRow();
foreach (DataColumn column in dwtb.Columns)
{
if (column.DataType.FullName == "System.Decimal")
{
newDtRow[column.ColumnName] = (Convert.ToDecimal(row[column.ColumnName]) / 10000).ToString("c") + "万";
}
else
{
newDtRow[column.ColumnName] = row[column.ColumnName];
}
}
newDt.Rows.Add(newDtRow);
}

for (int i = 0; i < dwtb.Rows.Count; i++)

{

int dwid = int.Parse(dwtb.Rows[i]["id"].ToString());

var sc = scList.Find(it => it.sc_dwid.Equals(dwid));

if (sc != null)

{

dwtb.Rows[i]["sh"] = sc.sc_sh;

}

else

{

dwtb.Rows[i]["sh"] = -2;//没有上传

}

int sh = int.Parse(dwtb.Rows[i]["sh"].ToString());

int dw_stid = int.Parse(dwtb.Rows[i]["dw_stid"].ToString());

dwtb.Rows[i]["xxlx"] = PubApp.GetSchoolKindNameById(dwtb.Rows[i]["dw_stid"].ToString());

dwtb.Rows[i]["audit"] = PubApp.GetAuditText(dwtb.Rows[i]["dw_stid"].ToString());

}

dwtb.Columns.Remove("id");

dwtb.Columns.Remove("dw_bm");

dwtb.Columns.Remove("sh");

dwtb.Columns.Remove("dw_stid");

for (int i = 0; i < dwtb.Columns.Count; i++)

{

string ColumnsName = dwtb.Columns[i].Caption;

if (ColumnsName.Equals("dw_name"))

{

dwtb.Columns[i].ColumnName = "单位名称";

}

if (ColumnsName.Equals("audit"))

{

dwtb.Columns[i].ColumnName = "状态";

}

if (ColumnsName.Equals("xxlx"))

{

dwtb.Columns[i].ColumnName = "类型";

}

}

DataTable 操作的更多相关文章

  1. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  2. C# 基础:DataTable操作、发邮件

    本文出自:https://www.cnblogs.com/2186009311CFF/p/6865909.html DataTable操作 据参数删除为0的列:包括遍历.删除.取值 public st ...

  3. QTP的DataTable操作整理(注---不知转载多少遍)

    返回值:数字 示例: 以下示例使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告. rowcount = DataTable.GetSheet(& ...

  4. QTP中DataTable操作大全

    序曲 假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder: 当前QTP的Test中有两个Action:Log ...

  5. [C#] DataTable 操作汇总(持续更新)

    1.DataTable 分组操作 var grow = dt.Select().GroupBy((row1) => { return new { //分组的字段 fieldA = row1[&q ...

  6. LINQ系列:LINQ to DataSet的DataTable操作

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  7. .NET DataSet、DataTable操作记录

    一直在习惯.net的编程思维,或是说C#吧.因为前几年一直在用PHP做站,现在用.net很不习惯,主要C#都依赖对控件.类的熟悉,不然很多功能都实现不了. 需求 最近做了一功能,从SQL Server ...

  8. 对datatable操作,查询

    #region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回 /// <summary> /// DataTable筛选,排 ...

  9. DataTable操作

    一 复制DataTable中符合条件的DataRow到新的DataTable中 One: DataTable TableTemp = new DataTable();//临时table DataTab ...

随机推荐

  1. Linux服务器access_log日志分析及配置详解(一)

    nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日 ...

  2. hdu3374 String Problem

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目: String Problem Time Limit: 2000/1000 MS (Java/ ...

  3. 仿netty线程池简化版本

    package com.hcxy.car.threadpools; import java.io.IOException; import java.nio.channels.Selector; imp ...

  4. python3_ftp文件传输

    Python中的ftplib模块 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件 FTP的工作流程及基本操作可参考协议RFC95 ...

  5. CSS Fonts(字体)

    CSS Fonts(字体) 一.serif和sans-serif字体之间的区别 注意: 在计算机屏幕上,sans-serif字体被认为是比serif字体容易阅读. 二.CSS字型 在CSS中,有两种类 ...

  6. Python3.x:pytesseract识别率提高(样本训练)

    Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 地址:https://sourceforge.net/projects/tessera ...

  7. python---自动群发邮件

    生活中我们经常发送邮件,那么我们能不能用Python写一个自动发送邮件的功能呢?答案是肯定的!!! 开始实现功能之前我们需要开启我们邮箱的 IMAP/SMTP功能,我们先了解一下什么是IMAP/SMT ...

  8. ECU

    ECU(Electronic Control Unit)电子控制单元,又称“行车电脑”.“车载电脑”等.从用途上讲则是汽车专用微机控制器,也叫汽车专用单片机.它和普通的单片机一样,由微处理器(CPU) ...

  9. 如何调试ubifs文件系统

    注意内核版本为4.9 在drivers/mtd/ubi/debug.h中加入DEBUG的定义,如下 #ifndef __UBI_DEBUG_H__#define __UBI_DEBUG_H__#def ...

  10. java quartz

     什么是Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触 ...