从c#中的Dataview排序后选择前N行

时间:2010-09-30 13:22:13

标签: c# dataview

我有一个DataTable,其中10行表示其中一列 随机编号为1到10。 我想对它们进行排序。通常,我这样做:

DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged);
repeater.DataSource = Dv;
repeater.DataBind();

现在,我只想绑定此Dataview中的前5行。如果我试试这个:

DvPopBlogs.Table.Rows.Cast<System.Data.DataRow>().Take(5);

OR

DvPopBlogs.Table.AsEnumerable().Take(5); //this usually works if sorting wasnt necessary

它可以工作,但是dataView完全忘记了排序,只从顶部选择了5行。

我也尝试过所有DataViewRowStates。排序后如何选择前5行?

我似乎没有想法! 请帮忙!

2 个答案:

答案 0 :(得分:4)

您正在访问DataView,但随后要求它绑定的Table - 表本身未排序,DataView提供表的排序“视图”。

所以试试(警告干码!)

DvPopBlogs.DataViewRows.Take(5)

获取前5个(按排序顺序)DataViewRows。如果你想要DataRows

DvPopBlogs.DataViewRows.Take(5).Select(dvr => dvr.Row)

DataView的枚举器很可能是DataViewRows集合,因此如果愿意,您可以使用DvPopBlogs.Take(5)....

答案 1 :(得分:1)

由于您已经转换为通用列表,为什么不转换数据视图而不是数据表?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);