关于DataView(DataTable)排序的思考
2006-09-08 11:34
162 查看
因项目需要,在获得dataset(或者DataTable)之后要对该table进行重新排序,排序规则按照数组fids元素的顺序进行。
在测试的时候,我用简单的思考方法,在table上增加一列dis,来存放该行的主键在fids中的对应项的索引,一个循环之后,dis都被赋了值,现在就要排序了,因为datatable没有排序功能,就选择了转换DataTable为DataView,然后对DataView进行排序,关键代码如下:
DataView dw = dt.DefaultView;
dw.Sort = "dis,发布日期 desc";
然后把dw绑定到DataGird输出,结果正好符合原意。
可是具体使用中却出了问题,因为我对dw又进行了一次处理,取该分页需要的某几项绑定到DataGird,于是结果和排序之前一样,没有了变化。
究其原因,才发现,这里的DataView只是设定了排序规则,并没有实施排序,那么排序在什么时候发生呢,应该是在绑定到DataGird的时候才发生,所以我后来的方法就出了问题。
总结如下:DataView的筛选和排序功能都是在绑定到数据控件的时候才执行的,如果你是简单的需求(也就是说不需要再取其中的部分数据来绑定数据控件),那就可以使用该功能。
我的问题的最终解决方法如下(只使用了简单的循环):
private DataTable SortTable(DataTable dt,string[] pids)
{
DataTable dt0 = dt.Clone(); //复制原表结构
for(int i=0;i<pids.Length;i++)
{
if(pids[i] != string.Empty)
{
DataRow[] drs = dt.Select("pos_id=" + pids[i]);
if(drs.Length > 0)
{
foreach(DataRow dr in drs)
{
dt0.ImportRow(dr); //导入行
}
}
}
}
return dt0;
}
说明:就是对排序的数组循环,在datatable中找对应的行,然后复制到新表中。
该方法的效率还是可以的,不过如果交集次数大于20,000,000的时候,就会有效率问题。
在测试的时候,我用简单的思考方法,在table上增加一列dis,来存放该行的主键在fids中的对应项的索引,一个循环之后,dis都被赋了值,现在就要排序了,因为datatable没有排序功能,就选择了转换DataTable为DataView,然后对DataView进行排序,关键代码如下:
DataView dw = dt.DefaultView;
dw.Sort = "dis,发布日期 desc";
然后把dw绑定到DataGird输出,结果正好符合原意。
可是具体使用中却出了问题,因为我对dw又进行了一次处理,取该分页需要的某几项绑定到DataGird,于是结果和排序之前一样,没有了变化。
究其原因,才发现,这里的DataView只是设定了排序规则,并没有实施排序,那么排序在什么时候发生呢,应该是在绑定到DataGird的时候才发生,所以我后来的方法就出了问题。
总结如下:DataView的筛选和排序功能都是在绑定到数据控件的时候才执行的,如果你是简单的需求(也就是说不需要再取其中的部分数据来绑定数据控件),那就可以使用该功能。
我的问题的最终解决方法如下(只使用了简单的循环):
private DataTable SortTable(DataTable dt,string[] pids)
{
DataTable dt0 = dt.Clone(); //复制原表结构
for(int i=0;i<pids.Length;i++)
{
if(pids[i] != string.Empty)
{
DataRow[] drs = dt.Select("pos_id=" + pids[i]);
if(drs.Length > 0)
{
foreach(DataRow dr in drs)
{
dt0.ImportRow(dr); //导入行
}
}
}
}
return dt0;
}
说明:就是对排序的数组循环,在datatable中找对应的行,然后复制到新表中。
该方法的效率还是可以的,不过如果交集次数大于20,000,000的时候,就会有效率问题。
相关文章推荐
- 用DataView随机排序---转DataTable
- DataTable,DataView 排序和使用
- 关于分治和递归的几点思考 有关全排序问题
- C# List.Sort() 排序; DataView 对DataTable 排序
- [DataTable]控件排序事件中用DataView及DataTable排序
- 关于DataSet、DataView、DataTable、DataRow、时间格式转换的一些用法
- Datatable,DataView排序(LINQ)
- 关于DataTable排序
- DataView能对DataTable的内容做筛选和排序工作
- 关于DataTable的Select排序的问题
- 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!
- 关于排序的一点思考
- 关于人生的思考
- 由play开发分页想到的,关于MVC结构的一些思考。
- 关于前两天的一个比较复杂的程序逻辑的思考
- 关于html转换为pdf案例的一些测试与思考
- 如何对DataTable按需要排序?
- 关于计算机体系结构的一点思考。
- 关于利用JAVA开发游戏外挂的几点思考
- 关于未来的方向问题思考