没有具体测试过,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 查看cpu 内存 硬盘 文件夹大小

    文件夹大小 显示cpu使用率 top 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | w ...

  2. jQuery语法基础&选择器

    jQuery 语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(select ...

  3. 从a站点跳转到b站点,通过url的参数判断是否让该用户选择身份

    一.问题的由来 问题是这样子给出来,今天产品那边跟我说,在a网站跳转到b网站时,让用户有一个选择身份的弹窗.因为公司有两个不同站点,你无论在a或者b网站注册后,都可以随便登录这两个站点,进入之后都会有 ...

  4. (8)Launcher3客制化之ContentProvider内容提供者,实现其它应用改动数据库更新等操作

    首先加入两个权限 <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS" ...

  5. Android架构分析之Android消息处理机制(二)

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的样例,本文我们 ...

  6. 简洁 Abstract Factory模式(3.1)

    镇楼 在某些书中使用了二维图说明抽象工厂模式.非常好,可是yqj2065不喜欢他们的产品族/产品等级,改成品牌/产品类型. 抽象工厂模式(abstract factory pattern)较工厂方法模 ...

  7. Hdu 2473(并查集删除操作) Junk-Mail Filter

    有木有非常吊 加强 加强版   啊  ,看了都不敢做了   .后来先做了食物链这个我还是看过的.但还是A不掉,没明确神魔意思 .总而言之.大牛的博客是个好东西.我就那么看了一下,还是不懂怎莫办啊,哎, ...

  8. java09 队列Queue与Deque

    队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...

  9. linux安全加固

    1 . BIOS 你应该总是在系统启动的时候设置一个BIOS 密码和禁用从CD-ROM 和软盘引导,这将可以防止一些人未经允许访问你的系统和更改BIOS 设置 2 .sshd 服务 SSH 是一个协议 ...

  10. fuck'em

    不要说GUNGHO的游戏,连逆转三国这种都没玩过,还是做手游的,表现的那么冠冕堂皇,还不只是个常规的做软件的而已.只是以做软件的程度来做游戏,能做出的是个JB.