我有两种办法.(是说ASP.Net吧,用datagrid)
1.使用datagrid的分页属性,不用贴代码了吧,这种方法虽然可以实现分页,但是服务器端是要执行大量的查询操作.2.大体思路如下:
假设分页,每页50.在数据库中有一个不重复的索引,假设是ID.
第一页, select top 50 * froom table ,查询简单,快. 然后记住第50条的ID,
第二页, select top 50 * from table where ID > 你记录的ID.
依次类推.
当然,写出存储过程就更快了.3.由于ADO.Net目前的版本不支持,服务器端的游标,微软说以后的版本会支持,支持以后,用这个一个更方便.4.实际上,减少网络的通讯量才是关键.
1.使用datagrid的分页属性,不用贴代码了吧,这种方法虽然可以实现分页,但是服务器端是要执行大量的查询操作.2.大体思路如下:
假设分页,每页50.在数据库中有一个不重复的索引,假设是ID.
第一页, select top 50 * froom table ,查询简单,快. 然后记住第50条的ID,
第二页, select top 50 * from table where ID > 你记录的ID.
依次类推.
当然,写出存储过程就更快了.3.由于ADO.Net目前的版本不支持,服务器端的游标,微软说以后的版本会支持,支持以后,用这个一个更方便.4.实际上,减少网络的通讯量才是关键.
解决方案 »
- discut的论坛这个版本的 dnt_3.5.0_sqlserver .net的语言的 验证码不显示
- 加法器
- 急问个C#的算法问题 大侠们 帮助啊
- 请问RDLC报表如何使用column进行分栏,请指教,万分感谢
- 请教c#中枚举类型的用法/
- 多行文本框 windows.forms.textbox ,怎么让他一直显示底部?
- 问几个关于C# 实现vb.net函数功能的问题?
- 怎样设计漂亮的WINDOWS FORM ,哪里有相关资料。我想制作出想visual studio.net这样界面的效果
- textbox的问题
- c#使用sqllite数据库将备份数据还原
- 有关序列化的问题
- Web TreeView控件问题
select 字段1,字段2,IDENTITY(int,1,1) as Num into #temp1 from tablename ...
select * from temp1 where Num>CurrentPageIndex*PageSize and Num<(CurrentPageIndex+1)*PageSize
假设表中有个标识主键ID,从1开始递增
当前页:
int cur = DataGrid.CurrentPageIndex;
每页显示i行
那命令就是
SELECT TOP i * FROM
SELECT TOP i*cur * FROM table ORDER BY ID DESC
ORDER BY ID
DataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。若要使用 Fill 方法返回一页数据,请指定 startRecord(它指定该数据页的第一个记录),并指定 maxRecords(它指定该数据页中的记录数)。 int currentIndex = 0;
int pageSize = 5;string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
SqlDataAdapter myDA = new SqlDataAdapter(orderSQL, nwindConn);DataSet myDS = new DataSet();
myDA.Fill(myDS, currentIndex, pageSize, "Orders");若要实现分层数据访问,可以使用 .NET 框架中的可用 XML 类。.NET 框架允许分别通过 DataSet 对象和 XmlDataDocument 对象对数据的关系和分层表示形式进行实时、同步的访问。
当 DataSet 与 XmlDataDocument 同步时,这两个对象都使用同一组数据。这意味着如果对 DataSet 作出更改,更改将在 XmlDataDocument 中得到反映,反之亦然。DataSet 和 XmlDataDocument 之间的这种关系允许单个应用程序使用一组数据来访问围绕 DataSet 生成的整组服务(例如 Web 窗体和 Windows 窗体控件以及 Visual Studio .NET 设计器)以及包括可扩展样式表语言 (Extensible Stylesheet Language, XSL)、XSL 转换 (XSLT) 和 XML 路径语言 (XPath) 在内的 XML 服务组,从而提供了很大的灵活性。您不必选择使应用程序以哪一组服务为目标——这两组服务都可用。有若干种方法可以使 DataSet 与 XmlDataDocument 同步。
使用架构(关系结构)和数据填充 DataSet,然后使其与新 XmlDataDocument 同步。这将提供现有关系数据的分层视图。例如:
DataSet myDataSet = new DataSet();// Add Code here to populate the DataSet with schema and data.XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
int p=o;
第一页,
select top 每页显示的记录条数n * from table ;
下一页,
p+=每页显示的记录数n;
select top 每页显示的记录条数n * from table where ID > 位置p.
1.XmlDataDocument myxml=new XmlDataDocument(dataset);
2.在myxml写入分页信息的Node;
3.编写相应的xsl文件,在xsl中通过<xsl:if test="position() >= $start and position() <= $end"></xsl:if>控制分页显示
4.通过XslTransform将xml转换为html.
但我觉得这种实现方法效率不高,每次都要从数据库中取出所有数据,数据量大时,速度肯定很慢。
以前我用PHP+MYSQL编写分页程序时,只需通过sql语句“select * from table order by time desc limit $start,$offset”就可以实现。
我觉得采用SQL Server数据库时的分页因难,主要是因为SQL Server没有提供分页的SQL语句。
mmkk() ( ) 兄的临时表是不是也全取出来再进行筛选的阿?
javanow(想我生命的意义)兄的游标是在存储过程里使用的吗?那岂不是也很浪费时间?
ToBeCharcoal(真想有星星)兄的取一段记录看起来很不错,其实在SqlDataAdapter填充DataSet之前就已经把所有的记录取回来了。
我觉得brbrm(般若波若密)兄的方法还好一些,但是我翻到很多页的时候也是个问题!以上愚见,仅是讨论,各位海涵。