DataTable
前言
从事ERP有一段时间了,最常用的集合 非DataTable莫属了。在数据量大的情况下,通常使用DataTable来缓存数据库中的表,下面介绍DataTable常用的方法(持续更新中)
简介
先介绍一下DataTable 的结构相信大家从名字也能看得出来 表格,类似我们常用的Excel 表格一样,但是没有Excel 那么复杂,就是简单的二维表格,更Mysql 中的表格类似。
常用的属性和方法
常用属性
CaseSensitive 指示表中的字符串比较是否区服务器托管网分大小写。
ChildRelations 获取此DataTable 的子关系的集合。
Columns 获取属于该表的列的集合。
Constraints 获取由该表维护的约束的集合。
DataSet 获取此表所属的DataSet。
DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图。
HasErrors 获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。
MinimumCapacity 获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。
Rows 获取属于该表的行的集合。
TableName 获取或设置DataTable 的名称。
常用方法
- 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");
1234567
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);
12345678910
3.添加行
//1.创建空行
DataR服务器托管网ow 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);
123456789
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();
12345678910
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'");
12345678910
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);
}
1234567891011121314151617
7.复制表
//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
//复制表
DataTable dtNew = dt.Copy(); //复制dt表数据结构
dtNew.Clear() //清空数据
for (int i = 0; i
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();//转为表
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net