一、排序

1 获取DataTable的默认视图

2 对视图设置排序表达式

3 用排序后的视图导出的新DataTable替换就DataTable

(Asc升序可省略,多列排序用","隔开)

DataView dv = dt.DefaultView;

dv.Sort = "id Asc,name Desc";

dt = dv.ToTable();

二、检索

1 设置查询字符串

2 使用Select方法获取到所有满足条件的数据行对象数组

(多项查询条件间,用and隔开.模糊查询使用 like %)

DataRow[] matches = dt.Select("(id>=20) and (title='会议') and (yearstr like '%2007%')");

string strName = matches[0]["name"].ToString();

另外也可以用下面这种方法,将检索出来的新表绑定到GridView

DataView dv = dt.DefaultView;

dv.RowFilter = "id>=2";

this.GridView1.DataSource = dv;

this.GridView1.DataBind();

三、合并

假定有2个DataTable:Dt1 , Dt2。表结构一样

将Dt2接在Dt1后可采用此方法

dt1.Merge(dt2);

四、分页

PagedDataSource pds = new PagedDataSource();

pds.AllowPaging = true;

pds.DataSource = dvIntegralExpense;

pds.AllowPaging = true;

pds.PageSize = pager.PageSize;

pds.CurrentPageIndex = pager.PageIndex;

rptIntegralExpense.DataSource = pds;

rptIntegralExpense.DataBind();

DataTable查询:

这里说到的查询有两种。

1.DataTable.Select
2.DataTable.Rows.Find
        /// <summary>
        /// 获取单张表
        /// </summary>
        /// <returns></returns>
        public static DataTable GetTable()
        {
            DataTable dt = new DataTable();
 
            dt.Columns.Add(new DataColumn("Id", typeof(int)));
            dt.Columns.Add(new DataColumn("Name", typeof(string)));
            dt.Columns.Add(new DataColumn("Age", typeof(int)));
 
            DataRow dr = dt.NewRow();
            dr["Id"] = 1;
            dr["Name"] = "tangh";
            dr["Age"] = 20;
            dt.Rows.Add(dr);
 
            dr = dt.NewRow();
            dr["Id"] = 2;
            dr["Name"] = "tangha";
            dr["Age"] = 19;
            dt.Rows.Add(dr);
 
            dr = dt.NewRow();
            dr["Id"] = 3;
            dr["Name"] = "tanghao";   
            dr["Age"] = 21;
            dt.Rows.Add(dr);
 
            return dt;
        }
2.然后我们来使用第一种Select方法。

/// <summary>
/// 使用DataTable.Select方法检索
/// </summary>
public static void VilideDataTableSelect()
{
DataTable dt = GetTable();

// 类似where条件查询,可以使用Id=2 and Name=ddd
DataRow[] rows = dt.Select("Id=2 and Name like 'tang%'"); // select类似where条件

foreach (DataRow dr in rows)
{
Console.Write(string.Format("Id={0},Name={1},Age={2}", dr["Id"], dr["Name"], dr["Age"]));
}
}

3.最后使用以下,Find方法。

/// <summary>
/// 使用DataTable.Rows.Find方法检索
/// </summary>
public static void VilideDataRowFind()
{
DataTable dt = GetTable();

// 设置主键,可以使用复合主键
dt.PrimaryKey = new DataColumn[] { dt.Columns["Id"] };

DataRow dr = dt.Rows.Find(2); // 查找Id=2的。即,这里检索主键。

Console.Write(string.Format("Id={0},Name={1},Age={2}", dr["Id"], dr["Name"], dr["Age"]));
}

总结:到现在才发现原来本身有很多方法可以检索的,所以也不必每次都循环遍历查找了

DataTable添加行或者插入行时显示"改行已属于另一表"的解决方案

1.运用add方法的解决方案:

DataTable dt = new DataTable(); 
dt = ds.Tables["All"].Clone();//把All的结构传递给dt 
DataRow[] dr=this.dataSet31.Tables["Product"].Select("bc=1"); 
for(int i=0;i<dr.Length;i++) 

//将数组元素加入表 
dt.Rows.Add(dr[i]);//出错提示为:该行已经属于另一个表 

//解决方法 
dt.Rows.Add(dr[i].ItemArray); 
//这样就好了!

2.运用insertAt方法的解决方案:

假设有table1和table2 
你想把table1的内容插入到table2 
那么

DataRow row = table2.NewRow(); 
row.ItemArray = table1.Rows[你需要的Row的索引].ItemArray; 
table2.Rows.InsertAt(row,你插入的索引);

DataTable 修改列名 删除列 调整列顺序

DataTable myDt =dt;
//删除列
myDt.Columns.Remove("minArea");
myDt.Columns.Remove("maxArea");

//调整列顺序 ,列排序从0开始
myDt.Columns["num"].SetOrdinal(1);

//修改列标题名称
dt.Columns["num"].ColumnName = "搜索量";
dt.Columns["rate"].ColumnName = "百分比";

DataTable汇总的更多相关文章

  1. DataTable,List,Dictonary互转,筛选及相关写法

    1.创建自定义DataTable  /// 创建自定义DataTable(一) 根据列名字符串数组, /// </summary> /// <param name="sLi ...

  2. 多工段查询存放到DataTable到List<DataTable>集合在C#里面做汇总

    private void btnQuery_Click(object sender, EventArgs e) { if (cboxFactory.Text=="") { Mess ...

  3. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  4. 遍历datatable的方法汇总

    遍历datatable的方法方法一: DataTable dt = dataSet.Tables[]; ; i < dt.Rows.Count ; i++) { string strName = ...

  5. 2016.2.28 DataTable用法汇总

    将控件的DataSource转换为DataTable,但是,此控件的DataSource绑定时必须是DataTable,不能是List DataTable dt = (bgvRoutePortion. ...

  6. datatable生成easyui的json格式汇总( 转)

    转自 http://www.cnblogs.com/WikStone/archive/2012/07/02/2573137.html 目前项目没有使用第三方的json转换库,都是根据json格式进行字 ...

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

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

  8. C#开源系统大汇总(个人收藏)

    C#开源系统大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...

  9. c# applibrary实现一个Sheet表中存放多张DataTable数据

    1.工具类(applibrary.dll) public class ExcelHelper { /// <summary> /// 文件名 /// </summary> pu ...

随机推荐

  1. 【Lua】Lua的几点优化原则

    Lua是一门以性能著称的脚本语言,被广泛的应用在很多方面,比如很多游戏的插件. 很多时候,没有必要去考虑性能的问题,不过,如果我们在开始编写代码的时候就以更适当,性能更高的方式与结构去组织代码,对于程 ...

  2. Ubuntu 试用Android L版本

    Android L是最近google一个大更新的版本,目前google开发了android L的开发者预览版本,对于一个android 开发者来说很定是要下载下来体验一把,顺便也要了解一下Androi ...

  3. 第五章 springboot + mybatis(转载)

    本编博客转发自:http://www.cnblogs.com/java-zhao/p/5350021.html springboot集成了springJDBC与JPA,但是没有集成mybatis,所以 ...

  4. python 类变量 在多线程下的共享与释放问题

    最近被多线程给坑了下,没意识到类变量在多线程下是共享的,还有一个就是没意识到 内存释放问题,导致越累越大 1.python 类变量 在多线程情况 下的 是共享的 2.python 类变量 在多线程情况 ...

  5. Markdown 基本入门使用

    http://www.appinn.com/markdown/ markdown快速入门Markdown 常用语法: # 标题 强调:用星号(*)和底线(_)作为标记强调字词的符号,如果你的 * 和 ...

  6. php内核探索 [转]

    PHP内核探索:从SAPI接口开始 PHP内核探索:一次请求的开始与结束 PHP内核探索:一次请求生命周期 PHP内核探索:单进程SAPI生命周期 PHP内核探索:多进程/线程的SAPI生命周期 PH ...

  7. Hadoop2.6.0配置参数查看小工具

    前言 使用Hadoop进行离线分析或者数据挖掘的工程师,经常会需要对Hadoop集群或者mapreduce作业进行性能调优.也许你知道通过浏览器访问http://master:18088/conf来查 ...

  8. 产生NaN

    1.数学运算失败  数字+undefind=NaN 2.数据类型转化失败产生NaN isNaN()检查 是不是一个有效数字,是NaN 返回 ture  ,正常数字返回false.

  9. 最小生成树算法——Kruskal算法

    #include<stdio.h> #include<algorithm> #include<windows.h> using namespace std; str ...

  10. Lessons Learned 1(敏捷项目中的变更影响分析)

    问题/现象: 业务信息流转的某些环节,会向相关人员发送通知邮件,邮件中附带有链接,供相关人员进入察看或处理业务.客户要求邮件中的链接,需要进行限制,只有特定人员才能进入处理或察看.总管想了想,应道没问 ...