我有一个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行?
我似乎没有想法! 请帮忙!
答案 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);