读书人

一个DataSet内进行数据操作的有关问题

发布时间: 2012-03-08 13:30:13 作者: rapoo

一个DataSet内进行数据操作的问题
现在在DataSet内已经得到一张数据表 举例如下

userID Fields Content
2 A 2Adata
2 B 2Bdata
3 A 3Adata
3 B 3bData
4 C 4cData
原始表就是这样了

想这样显示出来
UserId A B C
2 2Adata 2Bdata
3 3Adata 3bData
4 4cData

根据Fields字段中不同字段数自动建立列,根据UserID的不同ID数建立行,最后填入数据
没有的数据就空或者默认一个数据
可以保证UserID和Fields的对应不会出现重复
希望能直接在DataSet里操作获得新的表,因为上面的原始数据来自XML和数据库,已经是整合过的了...
数据量不算特别大,顶多几百条,试问下如何用DataSet的到下面的表,或者有没有其他更好的一些办法~

感觉这应该是个老问题了,也感谢能提供任何源码~~~

[解决办法]
看了一下 不会 呵呵 偶是新手 一起学习
[解决办法]
交差表交给sql处理会容易一些,如果非得用代码处理,那么写循环是必不可少的了,慢慢写吧.
[解决办法]
源码没有,思路有一个:

先New一个新的Table,再创建UserId列,然后遍历Fields字段,逐个创建列,
再遍历UserID字段,插入所有不重复的UserID数据,最后遍历Content,根据对应的UserID和Fields插入到指定的位置!
[解决办法]
貌似没有简单的办法,DataTable不能用SQL的查询..
[解决办法]
看看我的两个 DEMO,
这里,你可以选择方法 1 了,
如有可能,还是用 2 效率高些

1.
交叉表的简单实现2:使用前端程序实现
http://www.cnblogs.com/Jinglecat/archive/2007/05/24/757919.html

2.
交叉表的简单实现1:使用存储过程 http://www.cnblogs.com/Jinglecat/archive/2007/05/23/756427.html
[解决办法]
直接的写法:

private DataTable cst(DataTable t)
{
DataTable r = new DataTable();
DataColumn c = t.Columns[ "userID "];
DataColumn d = t.Columns[ "Content "];
DataColumn e = t.Columns[ "Fields "];
if (e.DataType != typeof(string))
throw new Exception( "字段Fields必须是字符串。 ");

r.Columns.Add(new DataColumn( "userID ", c.DataType));
foreach (DataRow dr in t.Rows)
{
DataColumn fc = null;
int n = r.Columns.IndexOf((string)dr[ "Fields "]);
if (n < 0)
{
fc = new DataColumn((string)dr[ "Fields "], d.DataType);
r.Columns.Add(fc);
}
else
fc = r.Columns[n];
DataRow fr = null;
foreach (DataRow x in r.Rows)
if (x[0].Equals(dr[c]))
{
fr = x;
break;
}
if (fr == null)
{
fr = r.NewRow();
fr[0] = dr[c];
r.Rows.Add(fr);
}

fr[fc] = dr[d];
}
return r;
}
------解决方案--------------------


@sp1234(音乐让我糊涂)

甚至不用进行数据库查询计算
--------------------------------
1。
我在想 数据库计算 难道是在硬盘上执行的?

2。
当然,不管怎样,我在 “数据库中计算” 也好, 在 “应用程序服务器中计算” 也好,这些数据,都要通过数据库查询出来吧?

3。
一般讲,
“数据库中计算” 基于 集合 吧? 当然,使用 游标 之类,就是我们避而远之的 迭代 了
“应用程序服务器中计算” 基于 迭代 吧?

4。
还是有待具体的测试

读书人网 >asp.net

热点推荐