六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET中使用DataGrid的自定義分頁技巧

[摘要]ASP.NET中利用DataGrid的自定義分頁功能和存儲過程結合實現高效分頁 ASP.Net中的DataGrid有內置分頁功能, 但是它的默認的分頁方式效率是很低的,特別是在數據量很大的時候,用它...
ASP.NET中利用DataGrid的自定義分頁功能和存儲過程結合實現高效分頁



ASP.Net中的DataGrid有內置分頁功能, 但是它的默認的分頁方式效率是很低的,特別是在數據量很大的時候,用它內置的分頁功能幾乎是不可能的事,因為它會把所有的數據從數據庫讀出來再進行分頁, 這種只選取了一小部分而丟掉大部分的方法是不可去取的.

在最進的一個項目中因為一個管理頁面要管理的數據量非常大,所以必須分頁顯示,并且不能用DataGrid的內置分頁功能,于是自己實現分頁. 下面介紹一下我在項目中用到的分頁方法.

當然顯示控件還是用DataGrid的, 因為數據綁定很方便^_^.

要保證不傳輸冗余的數據,那么必須在數據庫中數據讀取時實現分頁, 數據庫的分頁操作可以放在存儲過程中. 看了CSDN的一篇Blog中講了一個百萬級數據分頁的存儲過程的實現(http://blog.csdn.net/wellknow/posts/55167.aspx,他的這個方法可以根據不同情況進行適當的優化), 根據他的方法,這里實現一個簡單的SQL語句來實現這里分頁需要的存儲過程。

create procedure ListProduct

(

@PageIndex int, -- 分頁后需要頁的序號

@PageSize int, -- 一頁的大小

@ConditionSQL – 查詢條件的SQL語句

)

AS … 具體代碼就不寫了(可以參考上面的鏈接).



具體的SQL語句如下:

SELECT TOP 100 * FROM (select * from product where productid<200000) T WHERE T.productid NOT IN

(SELECT TOP 900 productid FROM (select productid from product where productid<200000) T1 ORDER BY T1.productid asc) ORDER BY productid asc

這條語句的 從總的商品(30萬)中取出productid<200000(共20萬),再按每頁100的大小分頁,然后取出第10頁.



Public DataTable ListProduct(int pageIndex, int pageSize)

{

//ADO.net從數據庫中取出數據的代碼就略過^_^.

}





用上面的存儲過程讀出的數據在DataGrid里面分頁, 必須把DataGrid的AllowPaging和AllowCustomPaging設置為true

protected System.Web.UI.WebControls.DataGrid ProductGrid;

ProductGrid.AllowPaging = true;

ProductGrid.AllowCustomPaging = true;



然后在設置要顯示的一頁的大小

ProductGrid.PageSize = 100; // 在顯示的時候依據實際的數據顯示。

設置一頁大小后,如果要讓DataGrid實際分出頁數來,還必須設置

ProductGrid.VirtualItemCount = GetProductCount() ; // GetProductCount() 的功能是獲取滿足條件的產品數目, 這里的條件就是productid<200000. 設置這項屬性后,那么這個DataGrid的頁數就是

VirtualItemCount/PageSize, 也就是PageCount的值. 不能對PageCount直接賦值,因為他是只讀的屬性.

這些屬性設置好后再綁定數據:

ProductGrid.DataSource = ListProduct(1, ProductGrid.PageSize); // 在Page_Load里面 pageIndex為1,記住判斷IsPostBack,在IsPostBack為false時執行這些代碼

ProductGrid.DataBind();



這樣數據綁定后就可以看到具有分頁模樣的頁面了.但是還不能真正的分頁.要實現真正的分頁,還必須實現下面的功能.



處理DataGrid的PageIndexChanged事件(處理用戶新選中某頁時的事件)

private void ProductGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

{

// 如果在存儲過程分頁功能中用1表示第一頁的序號的話那么這里必須用e.NewPageIndex+1作為pageIndex(如果選擇了DataGrid上頁號為3的頁,那么e.NewPageIndex就為2), 否則的話直接用e.NewPageIndex就可以了

ProductGrid.DataSource = ListProduct(e.NewPageIndex+1, ProductGrid.PageSize); // 從數據庫中讀取新的數據

ProductGrid.DataBind();

// 設置當前的Page序號值, 如果不設置的話它是不會變得, 這樣會給用戶造成誤解,以為所有頁的數據相同。

ProductGrid.CurrentPageIndex =e.NewPageIndex;

}



如果你處理了DataGrid的ItemCommand的事件的話,必須在ItemCommand事件處理代碼前面加上這些代碼:

if (e.Item.ItemType == ListItemType.Pager)

{

return;

}

因為當PageIndexChanged事件激發,也就是用戶選則了另外一頁時會先激發ItemCommand事件,如果不這樣處理的話,可能會遇到一些意想不到的情況(如果你確實需要的話也可以上面這段代碼,不過最好實際測試一下)。



整個過程完成后,再次瀏覽頁面,覺得速度真是快多了。



運行環境:

WinXP Pro SP1, SQLServer 2000, .Net Framework 1.1








主站蜘蛛池模板: 亚洲国产一 | 日本不卡视频一区二区三区 | 日日摸夜夜添夜夜添特色大片 | 亚洲你懂的 | 日韩久久网 | 手机看片日韩日韩 | 天天色综合图片 | 一级做a爰全过程免费视频 一级做a爰片性色毛片小说 | 午夜在线网址 | 日韩精品欧美一区二区三区 | 三级韩国一区久久二区综合 | 亚洲精品福利视频 | 亚洲国产一区在线观看 | 色婷婷亚洲十月十月色天 | 日日摸日日碰夜夜爽97纠 | 中国女人一级做受免费视频 | 日韩精品一区二区三区不卡 | 视频国产91 | 性生大片一级毛片免费观看 | 四虎永久影院永久影库 | 天天五月天 | 日韩精品免费在线视频 | 亚州一级毛片在线 | 有毛片毛毛片毛片毛片 | 中文字幕高清免费不卡视频 | 欧美一级高清片 | 最新亚洲情黄在线网站 | 无码中文资源在线播放 | 四虎影院海外永久 | 伊人久久91 | 亚洲国产成人影院播放 | 手机在线毛片免费播放 | 午夜免费体验 | 真实国产乱子伦精品一区二区三区 | 天天爱夜夜做 | 日韩精品在线第一页 | 天天做天天躁天天躁 | 日日淫| 色一欲一性一乱一区二区三区 | 一区二区三区视频在线播放 | 日本不卡免费新一区二区三区 |