【C#关键字】DataTable

一、DataTable是什么?

DataTable是一个临时保存数据的网络虚拟表,表示内存中数据的一个表,是一个二维表,也是一个后台数据源和前台显示之间的适配器。

二、常用属性及方法

1、常用属性

      CaseSensitive    指示表中的字符串比较是否区分大小写。 
      ChildRelations   获取此DataTable 的子关系的集合。 
      Columns          获取属于该表的列的集合。 
      Constraints      获取由该表维护的约束的集合。 
      DataSet          获取此表所属的DataSet。 
      DefaultView      获取可能包括筛选视图或游标位置的表的自定义视图。 
      HasErrors        获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。 
      MinimumCapacity  获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。 
      Rows             获取属于该表的行的集合。 
      TableName        获取或设置DataTable 的名称。

2、常用方法

BeginInit() 开始初始化在窗体上使用或由另一个组件使用的

DataTable。 初始化发生在运行时。

Clear() 清除所有数据的DataTable。

Clone() 克隆DataTable 的结构,包括所有DataTable 架构和约束。

EndInit() 结束在窗体上使用或由另一个组件使用的DataTable 的初 始化。初始化发生在运行时。

ImportRow(DataRow row) 将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。

Merge(DataTable table) 将指定的DataTable 与当前的DataTable 合并。

NewRow() 创建与该表具有相同架构的新DataRow。

三、常用的使用方法

1、创建

//创建一个空表
DataTable dt = new DataTable();
//创建一个名为"Table_New"的空表
DataTable dt = new DataTable("Table_New");
//DataTable(string tableName, string tableNamespace) 
//指定的表名和命名空间初始化DataTable类的新实例
DataTable dt = new DataTable("Table_New","Test");

2、添加列

DataColumn dc = new DataColumn();
//1.创建空列
dt.Columns.Add(dc);
//2.创建带列名和类型名的列(两种方式任选其一)
dt.Columns.Add("column0", System.Type.GetType("System.String"));
dt.Columns.Add("column0", typeof(String));
//3.通过列架构添加列
DataColumn dc = new DataColumn("column1",System.Type.GetType("System.DateTime"));
DataColumn dc = new DataColumn("column1", typeof(DateTime));
dt.Columns.Add(dc);

3、添加行

//1.创建空行
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
//2.创建空行
dt.Rows.Add();
//3.通过行框架创建并赋值
dt.Rows.Add("张三",DateTime.Now);//Add里面参数的数据顺序要和dt中的列的顺序对应 
//4.通过复制dt2表的某一行来创建
dt.Rows.Add(dt2.Rows[i].ItemArray);

4、赋值取值

//新建行的赋值
DataRow dr = dt.NewRow();
dr[0] = "张三";//通过索引赋值
dr["column1"] = DateTime.Now; //通过名称赋值
//对表已有行进行赋值
dt.Rows[0][0] = "张三"; //通过索引赋值
dt.Rows[0]["column1"] = DateTime.Now;//通过名称赋值
//取值
string name=dt.Rows[0][0].ToString();
string time=dt.Rows[0]["column1"].ToString();

5、筛选行

//选择column1列值为空的行的集合
DataRow[] drs = dt.Select("column1 is null");
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");
//DataTable.Select()方法里面支持简单的过滤和排序,不支持复杂的条件过滤和排序。里面的字符串必须是列名和数据,以及>,<,=,<>等关系运算符。
DataRow[] drs = dt.Select("column0 = '李四' and column0 = '1'");

6、删除行

//使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[0]);
//使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt(0);
//使用DataRow.Delete()方法
dt.Row[0].Delete();
dt.AcceptChanges();
 
//-----区别和注意点-----
//Remove()和RemoveAt()方法是直接删除
//Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
  dt.Rows.RemoveAt(i);
}

7、复制表

//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
//复制表
DataTable dtNew = dt.Copy(); //复制dt表数据结构
dtNew.Clear() //清空数据
for (int i = 0; i < dt.Rows.Count; i++)
{
  if (条件语句)
  {
     dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行
  }
}
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行

8、表排序

DataTable dt = new DataTable();//创建表
dt.Columns.Add("ID", typeof(Int32));//添加列
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Age", typeof(Int32));
dt.Rows.Add(new object[] { 1, "张三" ,20});//添加行
dt.Rows.Add(new object[] { 2, "李四" ,25});
dt.Rows.Add(new object[] { 3, "王五" ,30});
DataView dv = dt.DefaultView;//获取表视图
dv.Sort = "ID DESC";//按照ID倒序排序
dv.ToTable();//转为表

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DataTableC#中用于表示内存中的数据表的类。它类似于数据库中的表,可以存储和操作数据。而"from"和"group by"是LINQ查询语句中的关键字,用于从数据源中筛选和分组数据。 在C#中,可以使用LINQ查询语句从DataTable中进行筛选和分组操作。下面是一个示例代码,演示了如何使用LINQ查询语句从DataTable中进行分组操作: ```csharp // 假设有一个名为"myTable"的DataTable对象 DataTable myTable = new DataTable(); // 添加列 myTable.Columns.Add("Name", typeof(string)); myTable.Columns.Add("Age", typeof(int)); // 添加数据 myTable.Rows.Add("John", 25); myTable.Rows.Add("Mary", 30); myTable.Rows.Add("John", 35); myTable.Rows.Add("Mary", 28); // 使用LINQ查询语句进行分组操作 var query = from row in myTable.AsEnumerable() group row by row.Field<string>("Name") into grp select new { Name = grp.Key, Count = grp.Count(), AverageAge = grp.Average(row => row.Field<int>("Age")) }; // 遍历查询结果 foreach (var result in query) { Console.WriteLine($"Name: {result.Name}, Count: {result.Count}, Average Age: {result.AverageAge}"); } ``` 在上面的示例代码中,首先创建了一个名为"myTable"的DataTable对象,并添加了两列(Name和Age)以及一些数据。然后使用LINQ查询语句对数据进行分组操作,按照"Name"列进行分组,并计算每个分组的行数和平均年龄。最后,遍历查询结果并输出。 需要注意的是,使用LINQ查询语句对DataTable进行操作需要先将DataTable转换为可查询的数据源,可以使用`myTable.AsEnumerable()`方法将DataTable转换为可查询的数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值