DataTable实现分组

cwmwss 2008-12-29 04:51:59
我想对DataTable进行分组,
如datatable中有这两列 :
manual_no,manual_name;内容如下
1,zhangsan
1,lisi
1,wangwu
2,dingliu
2,zhaoqi
怎样将这个datable按manual_no分成几个子datable
dt1:
1,zhangsan
1,lisi
1,wangwu
dt2:
2,dingliu
2,zhaoqi
如果manual_no有其它值,则再加datatable



...全文
1249 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwmwss 2008-12-31
  • 打赏
  • 举报
回复
看来没更好的方法了,到此结贴,谢谢楼上各位
criedshy 2008-12-30
  • 打赏
  • 举报
回复
用DataView

DataView dv1 = new DataView(dt);

dv1.RowFilter = "manual_no=1";

DataView dv2 = new DataView(dt);

dv2.RowFilter = "manual_no=2";
cwmwss 2008-12-30
  • 打赏
  • 举报
回复
protected ArrayList splitdatatable(DataTable dt,string columnname, string sort)
{
ArrayList alTables = new ArrayList();
DataView dv = new DataView(dt);
dv.Sort = columnname + " " + sort;
int r = dt.Rows.Count;
string str1 = "";
for (int i = 0; i < dv.Count; i++)
{
int t = dv.Count;
if (dv[i][columnname].ToString() != str1)
{
DataTable dtChild = dt.Clone();
dtChild.Clear();
str1 = dv[i][columnname].ToString();
DataRow[] drs = dt.Select(columnname + "='" + str1 + "'");
for (int j = 0; j < drs.Length; j++)
{
dtChild.ImportRow(drs[j]);
}
alTables.Add(dtChild);
}
}
return alTables;
}
根据6楼的,我修改成一个方法,如果我要继续对第二个字段分组,在ArrayList 里的子table再用下这个方法?。。
cwmwss 2008-12-29
  • 打赏
  • 举报
回复
LINQ是不是08才有?我用的05。
9楼的查询N个出来不好查。就算可以,这种操作SQL跑太多。想只从数据库一次全部取出,然后多字段分组
hwhone 2008-12-29
  • 打赏
  • 举报
回复
可以直接用LINQ来分组排序查询,然后再FILL到DataSet
kingcsx666 2008-12-29
  • 打赏
  • 举报
回复
你查询n个出来,全部放倒dataset里面,不是有很多datatable子集了吗
cwmwss 2008-12-29
  • 打赏
  • 举报
回复
楼上的果然强,和我想的差不多。
有没有更简单的方法?
或者就类似楼上的方法实现更强的分组:
1,Y,zhangsan
1,Y,lisi
1,N,wangwu
2,Y,dingliu
2,N,zhaoqi
分成dt1:
1,Y,zhangsan
1,Y,lisi
1,N,wangwu
dt11:
1,Y,zhangsan
1,Y,lisi
dt12:
1,N,wangwu
dt2:
2,Y,dingliu
2,N,zhaoqi
dt21:
2,Y,dingliu
dt22:
2,N,zhaoqi
类似的,传入N个的字段名,实现N层嵌套分组。不过一般不会超过三个。

sprc_lcl 2008-12-29
  • 打赏
  • 举报
回复
alTables存的就是子表
sprc_lcl 2008-12-29
  • 打赏
  • 举报
回复
rrayList alTables = new ArrayList();
DataTable dt = new DataTable();
DataView dv = dt.DefaultView;
dv.Sort = "manual_no asc";
string manno = "";
for(int i=0;i<dv.Count;i++)
{
if(dv[i]["manual_no"].ToString() != manno)
{
DataTable dtChild = dt.Clone();
dtChild.Clear();
DataRow[] drs = dt.Select("manual_no="+manno);
for(int j=0;j<drs.Length;j++)
{
dtChild.ImportRow(drs[j]);
}
alTables.Add(dtChild);
manno = dv[0]["manual_no"].ToString();
}
}
cwmwss 2008-12-29
  • 打赏
  • 举报
回复
见第4楼
cwmwss 2008-12-29
  • 打赏
  • 举报
回复
问题是不清楚查询的条件,根据dt.select("manual_no=1","");?
根本不知道manual_no有哪些值啊
greatverve 2008-12-29
  • 打赏
  • 举报
回复
应该在sql语句里处理好,在DataSet里放多个DataTable
greatverve 2008-12-29
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
dt.Select("select * from mytable where manual_no=1");
不知此法是否可行。
一般的方法是这样:
http://blog.csdn.net/greatverve/archive/2008/12/25/3604703.aspx
wjxluck 2008-12-29
  • 打赏
  • 举报
回复
还是先查出来 在给datatble

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧