5

我有一个有 10 行的 DataTable,说其中一列随机编号为 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行?

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

4

2 回答 2

4

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

所以试试(警告干码!)

DvPopBlogs.DataViewRows.Take(5)

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

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

DataView 中的枚举器很可能是 DataViewRows 集合,因此您可以根据需要使用DvPopBlogs.Take(5)....

于 2010-09-30T13:28:32.540 回答
1

既然您已经在转换为通用列表,为什么不转换数据视图而不是数据表呢?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);
于 2010-10-08T09:21:32.407 回答