没有具体测试过,5w条数据在i5机器上大概是1.3~2s左右,但是个人感觉就是在处理数据库的分页或者是写条件的时候会有一些麻烦,不如使用数据库分页!

但是这种方法不失为一种思路

private void Form1_Load(object sender, EventArgs e)
{
#region 
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("name2");
dt.Columns.Add("type");
dt.Columns.Add("count");

Random ran3 = new Random();
Random ran = new Random();
Random ran2 = new Random();

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
DataRow dr ;
for (int i = 0; i < 50000; i++)
{
int k3 = ran3.Next(1, 2000);
int k=ran.Next(1, 13);
int c=ran2.Next(50, 100);

dr = dt.NewRow();

dr["name"] = "n"+k3.ToString();
dr["name2"] = "n2" + k3.ToString();
dr["type"] = "t"+k.ToString();
dr["count"] = "co"+c.ToString();
dt.Rows.Add(dr);
}
stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString());

#endregion
stopWatch.Restart();
DataTable dt2=getDt(dt, "type", "count","name","name2");
stopWatch.Stop();
Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString());
this.dataGridView1.DataSource = dt2;
}
/// <summary>
///
/// </summary>
/// <param name="dtsource">数据源</param>
/// <param name="colName">需要转置为列名的列 如city列</param>
/// <param name="dataName">需要转置的数据列 如count列</param>
/// <param name="val">其他可区分列 如name2列</param>
/// <returns></returns>
DataTable getDt(DataTable dtsource, string colName, string dataName, params string[] fileds)
{
DataTable dt = new DataTable();

DataTable newTable = dtsource.DefaultView.ToTable(true, fileds);

DataTable dtcol = dtsource.DefaultView.ToTable(true, colName);

foreach (DataRow item in dtcol.Rows)
{
newTable.Columns.Add(item[0].ToString());
}

for (int i = 0; i < newTable.Rows.Count; i++)
{
string strSel1 = "1=1 ";
for (int k = 0; k < fileds.Length; k++)//处理开头的数据
{
string rowname = newTable.Rows[i][k].ToString();
newTable.Rows[i][k] = rowname;
strSel1 += string.Format(" and {0}='{1}'",fileds[k],rowname);
}

for (int j = fileds.Length; j < newTable.Columns.Count; j++)
{
string cname = newTable.Columns[j].ColumnName;

string strSel2 = string.Format("{0}='{1}'",colName,cname);

DataRow[] dn = dtsource.Select(strSel1 + " and " + strSel2);

if (dn!=null&&dn.Length>0)
{
newTable.Rows[i][j] = dn[0][dataName].ToString();
}
}
}

return newTable;
}

 

datatable的数据转置的更多相关文章

  1. 使用反射将DataTable的数据转成实体类

    利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同) 1.利用反射把DataTable的数据写到单个实体类 /// <summary> ///利用反射把DataT ...

  2. 去除DataTable重复数据的三种方法

    业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库. 其中要避 ...

  3. 对DataTable里数据进行排序

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了. 我也不多废话 ...

  4. 泛型集合、datatable常用数据类型转换Json帮助类

    泛型集合.datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.Configuration; using Sys ...

  5. C#对DataTable里数据筛选排序的方法

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了 protect ...

  6. C#对DataTable里数据排序的方法

    protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Ad ...

  7. 去除DataTable重复数据的三种方法(转)

    转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...

  8. DataTable 删除数据后重新加载

    DataTable 删除数据后重新加载 一.总结 一句话总结: 判断datatable是否被datatable初始化或者是否执行了datatable销毁函数,如果没有,就销毁它 if ($('#dat ...

  9. DataTable的数据批量写入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

随机推荐

  1. linux安装svn服务器(yum方式)

    1.查看yum是否安装         在终端中输入yum即可如果已经安装,会显示yum的参数         如果没有安装,会提示yum未安装或无效命令…… 2.安装svnyum -y instal ...

  2. Oracle的commit详解(转)

    java通过jdbc thin方式连接数据库后,对数据库操作时会出现以下两种情况,我这可能记录不全: 1.在sqlplus中查询得到和java终端中输出的查询结果不同 2.执行某些sql语句卡住不动 ...

  3. Java正则表达式:Pattern类和Matcher类

    一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1     ((A)(B(C))) 2     (A) 3 ...

  4. CSS3:clip-path具体解释

    我的一个学生,Heather Banks,想要实现他在Squarespace看到的一个效果: 依据她的以往经验,这个站点的HTML和CSS是全然在她的能力范围以内,于是我帮助她完毕了这个效果.显示na ...

  5. Cocos2d-x之Touch事件处理机制

    一.两种机制的四种不同的事件 CCStandardTouchDelegate 默认事件   virtual void ccTouchesBegan(CCSet *pTouches, CCEvent * ...

  6. PureMVC(JS版)源码解析:总结

    PureMVC源码中设计到的11个类已经全部解析完了,回首想想,花了一周的时间做的这点事情还是挺值得的,自己的文字组织表达能力和对pureMVC的理解也在写博客的过程中得到了些提升.我也是第一次写系列 ...

  7. jQuery免费资料

     JQvery免豆.pdf       jQuery实战之仿flash跳动的按钮效果[源码]http://down.51cto.com/data/188600JQuery 1.4.2 手册简体中文版h ...

  8. Struts---- <s:bean>标签

    近几天学习的都是跟struts有关的.详细写<s:bean>标签 具体内容为: 一.准备工作 1.新建Web工程 2.添加struts:右键点击工程名选择My Eclipse-->点 ...

  9. Oracle 流式制造功能培训

    转自百度文库: http://wenku.baidu.com/link?url=dRyll_P7C3fepoUp5dggYVzw6lVmifwEJMLvis1CN58m09WYF1unY3Ddn9Lq ...

  10. R-大数据分析挖掘(2-R爬虫)

    RCurl作者: