
分页是Web应用程序中最常用到的功能之一,在ASPNET中,虽然自带了一个可以分页的DataGrid(aspnet 11)和GridView(aspnet 20)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASPNET程序员最头疼的问题之一。
今天闲来无事就学习学习了aspNetPager分页控件的用法:
AspNetPager针对ASPNET分页控件的不足,提出了与众不同的解决aspnet中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。
1首先下载aspnetpager控件,我这儿的版本是6000 点击下载
2把控件加到项目中(添加自定义控件的方法),并把它拖放到页面上:
<webdiyer:AspNetPager ID="AspNetPager1" runat="server"
AlwaysShow="True" //总是显示分页控件,即使要分页的数据只有一页
OnPageChanged="AspNetPager1_PageChanged" //分页发生改变时触发事件
UrlPaging="true" //通过URL传递分页信息的方式来分页。如果设为true,禁用ViewState也能达到效果。如果设置为false,禁用了viewstate则无法实现分页
NumericButtonTextFormatString="[{0}]" //页索引数字显示的格式
ShowCustomInfoSection="Left"> //显示当前页和总页数信息,默认值不显示,为left则将显示在页索引前,为right则为页索引后 </webdiyer:AspNetPager>
3Page_Load事件:
protected void Page_Load(object sender, EventArgs e)
{
if (!PageIsPostBack)
{
BindGridView();
}
}
BindGridView方法如下:
public void BindGridView()
{
string sql = "select from gw_newsletter_group";//自定义的SQL语句
int recordcount;
DataSet ds = GetPage(sql, thisAspNetPager1CurrentPageIndex, thisAspNetPager1PageSize,out recordcount);
thisAspNetPager1RecordCount = recordcount;
thisGridView1DataSource = ds;
thisGridView1DataBind();
AspNetPager1CustomInfoHTML = "记录总数:<b>" + AspNetPager1RecordCountToString() + "</b>";
AspNetPager1CustomInfoHTML += " 总页数:<b>" + AspNetPager1PageCountToString() + "</b>";
AspNetPager1CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1CurrentPageIndexToString() + "</b></font>";
}
其中的GetPage方法代码如下:(GetConnection()是返回一个SqlConnection对象)
/// <summary>
/// Get Data By CurrentPage
/// </summary>
/// <param name="sql">SQL</param>
/// <param name="currentPage">current Page</param>
/// <param name="pagesize">Page Size</param>
/// <param name="recordcount">Total Record</param>
/// <returns></returns>
public DataSet GetPage(string sql, int currentPage, int pagesize,out int recordcount)
{
SqlDataAdapter ada = new SqlDataAdapter(sql, GetConnection());
DataSet ds = new DataSet();
int startRow = (currentPage - 1) pagesize;
adaFill(ds, startRow, pagesize, "table");
recordcount = GetPageRecord(sql);
return ds;
}
GetPageRecord方法:(返回总的记录数)
public int GetPageRecord(string sql)
{
sql = SystemTextRegularExpressionsRegexReplace(sql, "ORDER BY", "");
sql = "select count() from (" + sql + ") as temp";
SqlCommand cmd = new SqlCommand(sql, GetConnection());
cmdConnectionOpen();
int recordcount = (int)cmdExecuteScalar();
return recordcount;
}
这里注意要去掉”Order By“的字符串(聚合函数不能和"ORDER BY"连用)
4另外:还有个事件:
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
BindGridView();
}
给你提供两种思路:
1你要取第二页,也就就是6-10,你可以先用top 10 ,取出前10个,然后desc倒序,再取出top 5
再倒序,这样就取出6-10个;
比如:select top 5 from (select top 10 from table_1 desc) t desc
2sqlserver 和oracle都有row_number() 这样的列,就是你取出的结果集给你多加一个列,你按row_number()去结果集也行。
比如:with table001 as (select row_number() over (order by Qid) as row_number , from ( "+sql+") k) select from table001 where row_number>= and row_number<= order by Qid
这个是我之前项目中的sql语句。你参考一下,作用就是 取( "+sql+") 中的sql 中的两个?之间的数据
---------------------------
你要取页数,可以用第二个思路,pk不一定是连续,可能有些数据给删除;
但是查询出来的结果集加上的row_number(),肯定是连续,
row_number%5==0;page = row_number/5
row_number%5!=0;page = row_number/5+1
easyui layout
var width = $(window)width()-80;
var height = $(window)height()-120;
stView_layout = $('#stView_layout')layout({
width: width,
height: height
});
station_view = $('#stationView')window({
title: '测站导航',
left:50,
top:80,
width: width,
modal: false,
shadow: false,
closed: true,
height: height,
onResize:function(w,h){
if(stView_treegrid){
stView_treegridtreegrid({
width:w-20,
height:h-260
});
}
}
});
# -- coding: utf-8 --
from pyquery import PyQuery as pq
import urllib
import urllib2
import threading
class Spider(threadingThread):
"""
A Python Spider
"""
def __init__(self, ad=''):
threadingThread__init__(self)
self__viewstate = ''
self__Url = '' #要访问的地址
self__Total =0
def run(self):
selffirstCollect()
def firstCollect(self):
"""
"""
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=09,/;q=08",
"Referer": "",#有些加入了来路判断,那这个就是必需要加的了
"Accept-Language": "zh-cn",
"Content-Type": "application/x-> #如果有其它条件请在这里添加,这个用>
有两种方法:
1使用数据库,也就是使用SQL来实现。这部分,你网上一搜一大堆。所以,这里不回答了。
2如果你使用的framework是大于NET35以上的,那么,非常简单,使用linq即可。
效果图:
代码:
private DataTable dt = new DataTable();private int i = 0;
private void Form1_Load(object sender, EventArgs e)
{
dtColumnsAdd("id");
dtColumnsAdd("name");
for (int i = 0; i < 10; i++)
{
dtRowsAdd(iToString(), "A" + iToString());
}
btnNextPerformClick();
}
private void btnNext_Click(object sender, EventArgs e)
{
var query = from q in dtAsEnumerable()
where ConvertToInt32(q["id"]) >= 2 i && ConvertToInt32(q["id"]) <= 2 i + 1
select q;
dataGridView1DataSource = queryAsDataView();
i++;
}
不知道你的分页是在数据库分页还是在客户端页面中分页。
不管怎么分页,通用的方法是,把每页要显示的 条数传给后台,重新 *** 作数据库,读取你要获取的那一条数据。
比如,库中有200条数据,每页显示20条,那么首页显示的是数据库中的第1-20条。
select from table where rownum <= 20 order by rownum;
第二页显示的是
select from (select a,rownum pxid from table a order by pxid) t where tpxid <= 20 and tpxid >10;
第一页的最后一条记录就是
select from (select a,rownum pxid from table a order by pxid) t where tpxid = 20;
希望对你有帮助。
暂时就这么多吧,不明白的地方可以追问。
以上就是关于AspNetPager分页改怎么采集全部的内容,包括:AspNetPager分页改怎么采集、关于java 分页取出数据所在页的页数。、easyui datagrid 分页后获取所有页面数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)