我自已构建了一个DataTable,想在这个DataTable的基础上先根据某个字段排序,然后取排名在前6位的数据,不足6位的全部显示。
例:
kmno kmmc pay
404-1 现金支出 25000
404-6-5-7 工资 180000
404-8-9-2 材料 15000
404-2 燃料 30000
444-8 折旧 2600
450-8-6-3 其它 100
412-8 电力 2600
我想实现的是先按pay排序,然后取前6位。注意由于条件限制,不能用sql语句从数据库中直接读取并筛选,不能用诸如select * from (select * from tab order by pay asc) where rownum<=6的语句,完全用DataTable的defaultview来实现,有点难为大家了,但没办法:)
例:
kmno kmmc pay
404-1 现金支出 25000
404-6-5-7 工资 180000
404-8-9-2 材料 15000
404-2 燃料 30000
444-8 折旧 2600
450-8-6-3 其它 100
412-8 电力 2600
我想实现的是先按pay排序,然后取前6位。注意由于条件限制,不能用sql语句从数据库中直接读取并筛选,不能用诸如select * from (select * from tab order by pay asc) where rownum<=6的语句,完全用DataTable的defaultview来实现,有点难为大家了,但没办法:)
但如果取前6位呀?我的筛选条件不是pay超过多少金额的这种条件,而是按顺序在前几位的row.
DataTable newTable = new DataTable();
foreach (DataColumn column in yourDataTable.Columns)
{
DataColumn newColumn = new DataColumn(column.ColumnName, column.DataType);
newTable.Columns.Add(newColumn);
}// 获得视图,并排序
DataView vw = yourDataTable.DefaultView;
vw.Sort = "pay asc";// 将视图的前6条拷贝到新表中
for (int i = 0; i < 6; i++)
{
if (i > vw.Count) break;
newTable.ImportRow(vw[i].Row);
}newTable 里就是你要的结果了。
2.然后用拷贝表
DataRow[] dr = dtBackup.Select("1 = 1","字段名 ASC");或DataRow[] dr = dtBackup.Select("1 = 1","字段名 DESC");
3.然后将源表清空
dt.Clear()
4.最后将dr中的纪录添加到源表就可以了 for(int i = 0;i < dr.Length;i++)
{
DataRow dr = dt.NewRow();
foreach(DataColumn dc in dt.Columns)
{
dt[dc.ColumnName] = dr[i][dc.ColumnName];
}
dt(dr);
}