DataTable一些操作
DataTable ReturnDt = new DataTable("Tab_Result");
ReturnDt.Columns.AddRange(new DataColumn[]
{
new DataColumn("序号", typeof(int)),
new DataColumn("分公司名称", typeof(string)),
new DataColumn("销售件数", typeof(int)),
new DataColumn("销售均价", typeof(decimal)),
new DataColumn("销售总额", typeof(decimal)),
new DataColumn("售前件数", typeof(int)),
new DataColumn("售后件数", typeof(int)),
new DataColumn("签约店数", typeof(int)),
new DataColumn("有效店数", typeof(int)),
new DataColumn("销售总件数", typeof(int)),
new DataColumn("总店数", typeof(int)),
});
int Count = ;
for (int i = ; i <= Count; i++)
{
System.Data.DataRow myRow = ReturnDt.NewRow();
myRow["序号"] = i;
myRow["分公司名称"] = "北京" + i;
myRow["销售件数"] = + i;
myRow["销售均价"] = Convert.ToDecimal(i.ToString()).ToString("0.00");
myRow["销售总额"] = Convert.ToDecimal(i.ToString()).ToString("0.00");
myRow["售前件数"] = i + ;
myRow["售后件数"] = i + ;
myRow["签约店数"] = i + ;
myRow["有效店数"] = i + ;
myRow["销售总件数"] = int.Parse(myRow["售前件数"].ToString()) + int.Parse(myRow["售后件数"].ToString());
ReturnDt.Rows.Add(myRow);
//需放在后面,不然赋值错误,可做为汇总列,没初始值
myRow["总店数"] = ReturnDt.Compute("Sum(签约店数)+Sum(有效店数)", "序号=" + i.ToString());
if (i == Count)
{
//添加汇总行
System.Data.DataRow myRow1 = ReturnDt.NewRow();
myRow1["序号"] = ;
myRow1["分公司名称"] = "汇总行";
myRow1["销售件数"] = ReturnDt.Compute("SUM(销售件数)", "");
myRow1["销售均价"] = ReturnDt.Compute("SUM(销售均价)", "");
myRow1["销售总额"] = ReturnDt.Compute("SUM(销售总额)", "");
myRow1["售前件数"] = ReturnDt.Compute("SUM(售前件数)", "");
myRow1["售后件数"] = ReturnDt.Compute("SUM(售后件数)", "");
myRow1["签约店数"] = ReturnDt.Compute("SUM(签约店数)", "");
myRow1["有效店数"] = ReturnDt.Compute("SUM(有效店数)", "");
myRow1["销售总件数"] = ReturnDt.Compute("SUM(销售总件数)", "");
myRow1["总店数"] = ReturnDt.Compute("SUM(总店数)", "");
//ReturnDt.Rows.Add(myRow1);//插入到最后一行
ReturnDt.Rows.InsertAt(myRow1, );//插入到第一行
}
}
//删除列
// ReturnDt.Columns.Remove("销售总件数");
//调整列顺序 ,列排序从0开始
ReturnDt.Columns["分公司名称"].SetOrdinal();
//修改列标题名称
ReturnDt.Columns["分公司名称"].ColumnName = "名称";
// ReturnDt.Rows.Remove(row);//根据row行信息删除
//ReturnDt.Rows.RemoveAt(1);//根据index索引删除
//查询序号大于等于5,并且按销售件数排序
EnumerableRowCollection<DataRow> query =
from order in ReturnDt.AsEnumerable()
where order.Field<int>("序号") <=
orderby order.Field<int>("销售总件数")
select order;
//复制表
DataTable boundTable = query.CopyToDataTable<DataRow>();
DataView view1 = query.AsDataView();
//view1.Sort = "序号 DESC";//降序
view1.Sort = "序号 ASC";//升序
view1.RowFilter = "序号 < 15";//筛选
//泛型转DataTable
List<People> list = new List<People>()
{
new People{ID=,Name="A",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区1",Work="工程师",Income=8000.09,Birthday=System.DateTime.Now},
new People{ID=,Name="B",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区2",Work="教师",Income=8010.09,Birthday=System.DateTime.Now},
new People{ID=,Name="S",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区3",Work="博士",Income=8200.09,Birthday=System.DateTime.Now},
new People{ID=,Name="AD",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区4",Work="工程师",Income=840.09,Birthday=System.DateTime.Now},
new People{ID=,Name="AA",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区5",Work="工程师",Income=8500.09,Birthday=System.DateTime.Now},
new People{ID=,Name="AR",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区6",Work="建筑师",Income=850.09,Birthday=System.DateTime.Now},
new People{ID=,Name="AW",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区7",Work="工程师",Income=8000.09,Birthday=System.DateTime.Now},
new People{ID=,Name="AR",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区8",Work="培训师",Income=860.069,Birthday=System.DateTime.Now},
new People{ID=,Name="AQ",Sex="男",Age=,Tel="0871-8989898",Addres="四川南通市区9",Work="工程师",Income=8900.09,Birthday=System.DateTime.Now},
};
System.Data.DataTable dt = ConvertToDataTable(list);
System.String str = ConvertToJson(dt);
System.Data.DataTable dt1 = JsonToDataTable(str);
}
public static DataTable JsonToDataTable(string strJson)
{
//取出表名
//var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
var rg = new Regex(@"([^:])+(?=:\{)", RegexOptions.IgnoreCase);
string strName = rg.Match(strJson).Value;
DataTable tb = null;
//去除表名
//strJson = strJson.Substring(strJson.IndexOf("{") + 1);
//strJson = strJson.Substring(0, strJson.IndexOf("}"));
//获取数据
//rg = new Regex(@"(?<={)[^}]+(?=})");
rg = new Regex(@"(?<={)[^}]+(?=})");
System.Text.RegularExpressions.MatchCollection mc = rg.Matches(strJson);
for (int i = ; i < mc.Count; i++)
{
string strRow = mc[i].Value;
string[] strRows = strRow.Split(',');
//创建表
if (tb == null)
{
tb = new DataTable();
tb.TableName = strName;
foreach (string str in strRows)
{
var dc = new DataColumn();
string[] strCell = str.Split(':');
dc.ColumnName = strCell[];
tb.Columns.Add(dc);
}
tb.AcceptChanges();
}
//增加内容
DataRow dr = tb.NewRow();
for (int r = ; r < strRows.Length; r++)
{
//dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
dr[r] = strRows[r];
}
tb.Rows.Add(dr);
tb.AcceptChanges();
}
return tb;
}
//datatable转json
public static string ConvertToJson(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
int count = dt.Rows.Count;
if (count != )
{
jsonBuilder.Append("[");
for (int i = ; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append(":\'");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\',");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
else
{
return null;
}
}
//泛型转Datatble
public static DataTable ConvertToDataTable<T>(IList<T> list)
{
if (list == null || list.Count <= )
{
return null;
}
DataTable dataTable = new DataTable(typeof(T).Name);
DataColumn column;
DataRow row;
System.Reflection.PropertyInfo[] PropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (T t in list)
{
if (t == null)
{
continue;
}
row = dataTable.NewRow();
for (int i = , j = PropertyInfo.Length; i < j; i++)
{
System.Reflection.PropertyInfo pi = PropertyInfo[i];
string name = pi.Name;
if (dataTable.Columns[name] == null)
{
column = new DataColumn(name, pi.PropertyType);
dataTable.Columns.Add(column);
}
row[name] = pi.GetValue(t, null);
}
dataTable.Rows.Add(row);
}
return dataTable;
}
public class People
{
public string Name { get; set; }
public int Age { get; set; }
public string Tel { get; set; }
public string Addres { get; set; }
public int ID { get; set; }
public string Sex { get; set; }
public double Income { get; set; }
public string Work { get; set; }
public System.DateTime Birthday { get; set; }
}
DataTable一些操作的更多相关文章
- DataTable相关操作,筛选,取前N条数据,获取指定列数据
DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...
- ASP.NET DataTable的操作大全
DataTable表示一个与内存有关的数据表,可以使用工具栏里面的控件拖放来创建和使用,也可以在编写程序过程中根据需要独立创建和使用,最常见的情况是作为DataSet的成员使用,在这种情况下就需要用在 ...
- DataTable多线程操作报错情况
最近在写一个http接口时用了DataTable这个强大的利器,接口用浏览器跑起来没任何问题.当时也没考虑并发问题,后来用一个压力测试工具做大并发测试,1000+/s次速度测试.发现程序报错了.程序报 ...
- Excel和datatable相互操作
/// <summary> /// Excel文档 /// </summary> /// <param name="table"></pa ...
- DataTable常用操作
添加列和行的三种方法(转载) 原文地址:http://www.cnblogs.com/jRoger/articles/1887581.html DataTable tblDatas =new Data ...
- datatable列操作
DataTable myDt =dt; //删除列 myDt.Columns.Remove("minArea"); myDt.Columns.Remove("max ...
- [C#]DataTable常用操作总结
].RowState == DataRowState.Unchanged) { //Your logic } //⑩Convert to ...
- jquery datatable 实例操作
var dataTables = $(".table").dataTable({ data: d,//为ajax的值,没有直接用插件自带的请求数据方式,个人觉得data的方式好控制 ...
- DataTable 常用操作
//定义表结构 DataTable dt = new DataTable(); dt.Columns.Add("FactoryId"); 或dt.Columns.Add(new D ...
随机推荐
- 【bzoj3172】 [Tjoi2013]单词
题目描述 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个 ...
- HighCharts基本使用实例(入门)
HighCharts 摘要 HighCharts是眼下最为流行的图表插件,应用范围广泛,眼下支持曲线图.区域图.3D图.柱状图.饼图.散列图.混合图等,而且还支持一些拓展的特殊图表,如:仪表图.极地图 ...
- poj 3294 Life Forms
后缀数组的题目,把后缀连接起来,这个还是先二分答案,然后选取一段连续的height值,判断这些height代表的后缀有没有覆盖一半以上的字符串. 得出答案的长度之后还要在枚举连续的heigh,判断有没 ...
- lucene索引并搜索mysql数据库[转]
由于对lucene比较感兴趣,本人在网上找了点资料,终于成功地用lucene对mysql数据库进行索引创建并成功搜索,先总结如下: 首先介绍一个jdbc工具类,用于得到Connection对象: im ...
- 第一个Xcode项目 - 代码修改布局约束
第一行的选中效果已经有了,那第二行的选中效果怎么做呢?我这里选择改变布局约束来实现选中效果 [我有个用object-c做APP的同事他说,我觉得这个应该去获取色块的位置,然后赋给选中用的View,然后 ...
- CPP: 跨平台生成GUID/UUID
#ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...
- android开发之定制ViewPager滑动事件
明天还要加班,苦逼的程序猿,简单说说最近遇到的一个问题吧. 我在viewpager+fragment学习笔记中简单介绍过ViewPager+Fragment的用法,其实并不难,当时实现了一个如下图所示 ...
- a标签中的href="#"与href="javascript:void(0)"区别
转自http://blog.csdn.net/fightplane/article/details/5190037 <a href="#"> 点击链接后,页面会向上滚到 ...
- promise和Angular中的 $q, defer
在ES6语法中,新出了promise构造函数, 可用来生成promise实例. Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作).有了promise对象, 可以将异步操作以同步 ...
- Google Map API v2 (四)----- 导航路径
仍然是建议个异步小任务 private GetPathTask mGetPathTask = null; private void getGuidePath(LatLng origin){ if(mG ...