C# 从c中的Dataview中选择排序后的前N行
我有一个数据表,有10行,比如其中一列 随机编号1到10。 我想把它们分类。通常,我会这样做:C# 从c中的Dataview中选择排序后的前N行,c#,dataview,C#,Dataview,我有一个数据表,有10行,比如其中一列 随机编号1到10。 我想把它们分类。通常,我会这样做: DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged); repeater.DataSource = Dv; repeater.DataBind(); 现在,我只想绑定这个数据视图中的前5行。如果我尝试这样做: DvPopBlogs.Table.Rows.Cast<System.Data.
DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged);
repeater.DataSource = Dv;
repeater.DataBind();
现在,我只想绑定这个数据视图中的前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行
我也尝试过所有DataViewRowState。排序后如何选择前5行
我好像没什么主意了!
请帮忙 您正在访问DataView,但随后请求它绑定到的表-表本身没有排序,DataView提供了表的排序视图 所以试试警告干码吧
DvPopBlogs.DataViewRows.Take(5)
获取排序顺序DataViewRows中的前5个。如果需要数据行,请执行以下操作:
很可能DataView中的枚举器是DataViewRows集合,因此您可以只使用DvPopBlogs.Take5。。。。如果愿意的话。既然您已经在对通用列表进行强制转换,为什么不强制转换dataview而不是datatable呢
IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);
是的,我在调试时发现了这一点,dataview似乎有排序顺序,但当我添加表时,排序顺序就丢失了,现在我知道表是原始数据。谢谢但是,DvPopBlogs是一个DataView,它既没有.Take方法也没有.DataViewRows方法!请尝试dvpopbogs.AsEnumerable.Take,或者在最坏的情况下尝试dvpopbogs.ToTable。后者将从视图的内容创建一个新的数据表。您好,很抱歉,如果我使用.ToTable方法,repeater在bind上抱怨某些列不存在。调试表明它确实存在,可能是我做错了什么,如果没有完整的代码,您肯定无法发现。你建议我现在做什么?谢谢,很抱歉问了太多问题!谢谢,我真的发现这是可行的,我的代码中有一个小错误,五天来我一直在找错误的树!我是个白痴!嗨,它仍然抛出相同的错误,其中一列不存在!我已经尝试过调试它,我可以清楚地看到该列,但是,在databind上它确实抛出了这个错误!
IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);