DataSet DataTable操作


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,DataTable dt = GetData(iPageSize, iPageIndex).Tables[0];? //GetData(iPageSize, iPageIndex)返回DataSet
? dt.Columns.Add(“Detail”);? //增加栏位? 注意的一点是dt的列名大小写不敏感,源于sql语句大小写不敏感
??????????? foreach (DataRow row in dt.Rows)
??????????? {
??????????????? row[“Detail”] =”123″
??????????? }
??????????? return dt;
GridView1DataSource = dt;? //gridview datasource可以是dataset, 也可以是datatable
? //dt.Columns.Add(“Detail”); Detail默认为string类型,指定类型可用:
? ? ?? DataColumn column = new DataColumn(“pageBy”);
??????? column.DataType = System.Type.GetType(“System.Int32”);
??????? column.AutoIncrement = true;
??????? column.AutoIncrementSeed = 0;
??????? column.AutoIncrementStep = 1;
?????? column.DefaultValue = 0;
??????? dt.Columns.Add(column);

加列
?DataRow srow = dt.NewRow();
??????????????? row[“OrderStatus”] = row[“OrderStatus”].ToString();
??????????????? row[“OrderNums”] = 1;
??????????????? row[“OrderAmounts”] = row[“Amount”].ToString();
?????????????? sdt.Rows.Add(srow);
2,排序
?DataView DV = dt.DefaultView;
?DV.Sort = “department, amount desc”;
//排序时注意的一点是列的类型,如amount若是string型,就不会按数字排序

//datatable是内存中的表,这个表可以增加,删除,update记录的,而dataview只是相当于视图,基本上是用来显示数据的,? 用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

?执行聚合函数:如sum,count
dt.Compute(“Sum(Total)”, “EmpID = 5”);
dt.Compute(“Sum(fenshu)”,”1=1″);?
注意没有count(*) count(1) 要指定具体的列
Sum(expression)中expression要注意的是:
1,expression这个参数中的列名不能是数字开头,否则就会报这个错。(这个很难排查出来。。。)
2,expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。

3,查询,取部分数据集
?? ?string expression = “Date > ‘1/1/00′”;
?? ?string sortOrder = “CompanyName DESC”;
?? ?DataRow[] foundRows = table.Select(expression, sortOrder); //查询带排序
?? (1)取部分行
?DataView davTemp = new DataView(datSource, “过滤条件”, “排序字段”, DataViewRowState.各种 状态);
//把过滤后的表赋给新表
DataTable datNew = davTemp.ToTable();
(2)取部分列
DataTable dat = YourDataTable.DefaultView.ToTable(false, new string[] { “你要的列名”, “你要的列名” });
false : 不去掉重复行
(3)删除列
YourDataTable.Columns.Remove(“列名”);

4,设主键
?? DataTable dt = new DataTable();
??????? dt.Columns.Add(“id”);
??????? dt.Columns.Add(“PartName”);
??????? dt.Columns.Add(“Style”);
??????? dt.Columns.Add(“quantity”);
??????? dt.Columns.Add(“Unit”);
??????? DataColumn dc1 = new DataColumn(“Amount”,typeof(float));
??????? dtAll.Columns.Add(dc1);
??????? //增加主键
??????? DataColumn[] columns = new DataColumn[2];
??????? columns[0] = dt.Columns[“id”];
??????? columns[1] = dt.Columns[“Style”];
??????? dt.PrimaryKey = columns;

按主键查询:
? object[] findTheseVals = new object[2];
?? findTheseVals[0] = id;
?? findTheseVals[1] = Style;
?? DataRow dr = dt.Rows.Find(findTheseVals);

两个DataTable合并: merge
dt1.Merge(dt2,true);
//true指示当dt2存在与dt1相同的主键值时dt1是否不修改,当为false时用dt2更新dt1, 要牢记的是同一个table中主键必须要保持唯一,若只想两个table简单的合在一起,那要在merge之前将两个DataTable的主键去掉,如:dt1.PrimaryKey = null;

DISTINCT

DataTable dataTable;

DataView dataView = dataTable.DefaultView;

DataTable dataTableDistinct = dataView.ToTable(true,”FieldName1″,”FieldName2″,”…”);

//注:其中ToTable()的第一个参数为是否DISTINCT
1,DataTable dt = GetData(iPageSize, iPageIndex).Tables[0];? //GetData(iPageSize, iPageIndex)返回DataSet
? dt.Columns.Add(“Detail”);? //增加栏位? 注意的一点是dt的列名大小写不敏感,源于sql语句大小写不敏感
??????????? foreach (DataRow row in dt.Rows)
??????????? {
??????????????? row[“Detail”] =”123″
??????????? }
??????????? return dt;
GridView1DataSource = dt;? //gridview datasource可以是dataset, 也可以是datatable
? //dt.Columns.Add(“Detail”); Detail默认为string类型,指定类型可用:
? ? ?? DataColumn column = new DataColumn(“pageBy”);
??????? column.DataType = System.Type.GetType(“System.Int32”);
??????? column.AutoIncrement = true;
??????? column.AutoIncrementSeed = 0;
??????? column.AutoIncrementStep = 1;
?????? column.DefaultValue = 0;
??????? dt.Columns.Add(column);

加列
?DataRow srow = dt.NewRow();
??????????????? row[“OrderStatus”] = row[“OrderStatus”].ToString();
??????????????? row[“OrderNums”] = 1;
??????????????? row[“OrderAmounts”] = row[“Amount”].ToString();
?????????????? sdt.Rows.Add(srow);
2,排序
?DataView DV = dt.DefaultView;
?DV.Sort = “department, amount desc”;
//排序时注意的一点是列的类型,如amount若是string型,就不会按数字排序

//datatable是内存中的表,这个表可以增加,删除,update记录的,而dataview只是相当于视图,基本上是用来显示数据的,? 用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

?执行聚合函数:如sum,count
dt.Compute(“Sum(Total)”, “EmpID = 5”);
dt.Compute(“Sum(fenshu)”,”1=1″);?
注意没有count(*) count(1) 要指定具体的列
Sum(expression)中expression要注意的是:
1,expression这个参数中的列名不能是数字开头,否则就会报这个错。(这个很难排查出来。。。)
2,expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。

3,查询,取部分数据集
?? ?string expression = “Date > ‘1/1/00′”;
?? ?string sortOrder = “CompanyName DESC”;
?? ?DataRow[] foundRows = table.Select(expression, sortOrder); //查询带排序
?? (1)取部分行
?DataView davTemp = new DataView(datSource, “过滤条件”, “排序字段”, DataViewRowState.各种 状态);
//把过滤后的表赋给新表
DataTable datNew = davTemp.ToTable();
(2)取部分列
DataTable dat = YourDataTable.DefaultView.ToTable(false, new string[] { “你要的列名”, “你要的列名” });
false : 不去掉重复行
(3)删除列
YourDataTable.Columns.Remove(“列名”);

4,设主键
?? DataTable dt = new DataTable();
??????? dt.Columns.Add(“id”);
??????? dt.Columns.Add(“PartName”);
??????? dt.Columns.Add(“Style”);
??????? dt.Columns.Add(“quantity”);
??????? dt.Columns.Add(“Unit”);
??????? DataColumn dc1 = new DataColumn(“Amount”,typeof(float));
??????? dtAll.Columns.Add(dc1);
??????? //增加主键
??????? DataColumn[] columns = new DataColumn[2];
??????? columns[0] = dt.Columns[“id”];
??????? columns[1] = dt.Columns[“Style”];
??????? dt.PrimaryKey = columns;

按主键查询:
? object[] findTheseVals = new object[2];
?? findTheseVals[0] = id;
?? findTheseVals[1] = Style;
?? DataRow dr = dt.Rows.Find(findTheseVals);

两个DataTable合并: merge
dt1.Merge(dt2,true);
//true指示当dt2存在与dt1相同的主键值时dt1是否不修改,当为false时用dt2更新dt1, 要牢记的是同一个table中主键必须要保持唯一,若只想两个table简单的合在一起,那要在merge之前将两个DataTable的主键去掉,如:dt1.PrimaryKey = null;

DISTINCT

DataTable dataTable;

DataView dataView = dataTable.DefaultView;

DataTable dataTableDistinct = dataView.ToTable(true,”FieldName1″,”FieldName2″,”…”);

//注:其中ToTable()的第一个参数为是否DISTINCT