一、表格的数据过滤,但是不改变表格列的结构
1)

DataTable dt = new DataTable();
dt.Columns.Add("姓名");
dt.Columns.Add("年龄");
int rowCount1 = 4;
for (int i = 0; i < rowCount1; i++)
{DataRow dataRow = dt.Rows.Add();if (i == 0){dataRow[0] = "小王";//可以使用索引来访问行dataRow["年龄"] = i.ToString();//可以使用列名来访问行}else{dataRow[0] = "小李";dataRow["年龄"] = i.ToString();}
}
DataTable dt2 = dt.Select("年龄>1").CopyToDataTable(); //对行进行操作,如果不是字符串则不用单引号,CopyToDataTable()是将datarow[]转成了表格。
DataTable dt3 = dt.Select("姓名='小李'","年龄 desc").CopyToDataTable();//对行进行操作,并且,第二个参数是对列进行排序,desc是降序,asc是升序
DataTable dt4 = dt.Select("姓名='小李'", "年龄 desc",DataViewRowState.Added ).CopyToDataTable();//对行进行操作,并且指定被操作的行的类型
DataRow [] DR = dt.Select("姓名='小李'", "年龄 desc");dataGridView1.DataSource = dt;
dataGridView2.DataSource = dt2;
dataGridView3.DataSource = dt3;
dataGridView4.DataSource = dt4;


2)获取满足某个条件的某个单元格的值

DataTable dt = new DataTable();dt.Columns.Add("姓名");dt.Columns.Add("年龄");int rowCount1 = 4;for (int i = 0; i < rowCount1; i++){DataRow dataRow = dt.Rows.Add();if (i == 0){dataRow[0] = "小王";//可以使用索引来访问行dataRow["年龄"] = i.ToString();//可以使用列名来访问行}else{dataRow[0] = "小李";dataRow["年龄"] = i.ToString();}}var nameVal = dt.AsEnumerable().FirstOrDefault(item => item.Field<string>("姓名") == "小李").Field<string>("年龄");//先获取满足某个条件的某一行,然后再次根据列名筛选出某一个单元格的值Console.WriteLine(nameVal);

二、表格的数据过滤,但是改变表格列的结构

DataTable dt = new DataTable();dt.Columns.Add("姓名");dt.Columns.Add("年龄");int rowCount1 = 4;for (int i = 0; i < rowCount1; i++){DataRow dataRow = dt.Rows.Add();if (i == 0){dataRow[0] = "小王";//可以使用索引来访问行dataRow["年龄"] = i.ToString();//可以使用列名来访问行}else{dataRow[0] = "小李";dataRow["年龄"] = i.ToString();}}dataGridView1.DataSource = dt.DefaultView.ToTable(false, new string[] { "姓名" });dataGridView5.DataSource = dt.DefaultView.ToTable(true, new string[] { "姓名" });dataGridView2.DataSource = dt.DefaultView.ToTable(false, new string[] { "姓名", "年龄" });dataGridView4.DataSource = dt.DefaultView.ToTable(false, new string[] { "年龄", "姓名" });dataGridView3.DataSource = dt.DefaultView.ToTable(false, new string[] { "年龄" });


从上图可以看出,通过以上操作可以调换列的左右排列顺序,或者减少列的个数,或者对列的元素进行去重操作。
三、行状态的监控

 DataTable dataTable = new DataTable("dataTable");DataColumn dataColumn = new DataColumn("dataColumn");dataTable.Columns.Add(dataColumn);// Add ten rows.DataRow dataRow;dataRow = null;for (int i = 0; i < 3; i++){dataRow = dataTable.NewRow();dataRow["dataColumn"] = "item " + i;Console.WriteLine(dataRow.RowState);dataTable.Rows.Add(dataRow);//添加行}PrintRowState(dataTable);dataTable.AcceptChanges();PrintRowState(dataTable);dataTable.Rows[0][dataColumn] = "hello";PrintRowState(dataTable);
  /// <summary>/// 输出行状态/// </summary>/// <param name="dataTable"></param>private void PrintRowState(DataTable dataTable){int rows = dataTable.Rows.Count;for (int i = 0; i < rows; i++){DataRow dataRow = dataTable.Rows[i];Console.WriteLine(dataRow.RowState);}}

输出:

Detached//行被创建但是没有添加到表格中
Detached
Detached
Added//行被添加到表格中,但是之后没有调用AcceptChanges方法
Added
Added
Unchanged//行调用AcceptChanges方法之后,尚未更改行的值
Unchanged
Unchanged
Modified//更改行的值,但是之后没有调用用AcceptChanges
Unchanged
Unchanged

DataTable用法详解相关推荐

  1. C# DataTable用法详解

    添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...

  2. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  3. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  4. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  5. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  6. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  7. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

  8. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  9. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

最新文章

  1. 基于 HTML5 WebGL 的 3D 棉花加工监控系统
  2. IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)
  3. 开源在线考试系统推荐-支持web端和小程序
  4. 程序员输入法_解决Pycharm输入法不跟随光标
  5. VS Code 调试ROS节点
  6. XSRF(XSS+CSRF)
  7. 统计自然语言处理(第2版)目录
  8. Mac系统 wps/word和endnote关联,导入参考文献
  9. java读取properties文件连接数据库
  10. meson中自定义变量的使用
  11. Mac/Linux查看内网ip与访问公网的ip地址
  12. 让你轻松入门的编程学习窍门,JAVA、Python快速学习资料+练手项目
  13. php面试题大全及答案
  14. Rebranding (字典序替换 思维)
  15. 虚拟化IBM HMC
  16. eclipse安装red5插件
  17. 实践GoF的23种设计模式:建造者模式
  18. Win7套路深,Win10要认真
  19. Altair Simdroid 流体分析模块介绍
  20. Ethernet(以太网) 物理介质(10Base、100Base-T、100Base-TX等)

热门文章

  1. 【miscellaneous】海康威视监控摄像头实现web端无插件监控实拍效果
  2. 大学Linux操作系统笔记——文件与目录访问权限管理
  3. 机试算法讲解: 第10题 让我们来查询学生的信息
  4. Unity - 游戏加密方案-DLL加密方法记录
  5. myeclipse清理缓存方法(图解)
  6. html+css+javascript实现倒数计时
  7. 使用vuetify2.0的正确姿势
  8. 在AWS EC2上搭建jenkins并且整合git+maven+docker自动化部署环境(一)
  9. java实现购物车的原理及步骤_购物车的原理及实现
  10. ATM交换机与以太网交换机的区别