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. R语言 dbWriteTable 写入数据库 为空和乱码问题

    在windows环境下 用RMySQL 写入数据库中文数据为空 或者乱码问题. 找了下资料 一般情况是 用 insert 语句插入,结合现有业务有点麻烦,放弃了. 还有一种方式换平台,由于经常在win ...

  2. 汇编的WEAK关键字

    一般来说,这个关键字使用在IMPORT和EXPORT这两个声明段. ////////////////////////////////////////////////////////////////// ...

  3. 跟我学Makefile(一)

    1.首先,把源文件编译生成中间代码文件,Windows下.obj文件,unix下.o文件,即Object File.这个动作叫编译(compile) 把大量的Object File合并执行文件,叫做链 ...

  4. [golang note] 流程控制

    流程控制 • 流程控制语句作用 ▪ 选择:根据条件跳转到不同的执行序列. ▪ 循环:根据条件反复执行某个序列. ▪ 跳转:据条件返回到某执行序列. • 流程控制语句类型 ▪ 条件语句:关键字为if.e ...

  5. 300. Longest Increasing Subsequence(LIS最长递增子序列 动态规划)

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  6. [User Defaults] Failed to read values in CFPrefsPlistSource (iOS 10)

    最近遇到一个bug,偶发,后来发现概率还挺高(10%). NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; ...

  7. @RequestMapping @SessionAttributes @ModelAttribute注解用法

    简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestM ...

  8. [日志]logback告警

    开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的.logback可以通过简单的配置达到邮件告警的目的. 一.错误告警 如下配置,所有Error级别的log发送邮件告警给re ...

  9. HCNP学习笔记之PXE原理详解及实践

    一.PXE简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...

  10. Python3.x:代理ip刷评分

    Python3.x:代理ip刷评分 声明:仅供为学习材料,不允许用作商业用途: 一,功能: 针对某网站对企业自动刷评分: 网站:https://best.zhaopin.com/ 二,步骤: 1,获取 ...