ASP.NET整理:DataList分頁PagedDa…

十八.DataList控件

保存主鍵的方式:1.DataKeyField

2.設置隱藏域<asp:HiddenField runat="server" id="hdid" value='<%# eval_r("id")%>' />

屬性:

RepeatColumns:顯示的列數,默認爲0,表示單行/單列

RepeatDirectionHorizontal:水平;Vertical:垂直

<asp:DataList runat="server" id="dlItems" GridLines="both" CssClass="margin" RepeatColumns=2" RepeatDirection="Horizontal" />

DataListItemCommand事件相當於RowCommand事件

另外DataList沒有行、列一說,只有“項”的概念(佈局類似於單元格,但用item表示)

eg

int index =e.Item.ItemIndex; //獲得該項的索引號

string curId = this.DL.DataKeys[index].ToString();//獲得主鍵值

DataKeyField賦值方法:this.DL.DataKeyField = new string[]{"主鍵1",....}; //未測試過

地方

分頁:

1.確定每頁有多少數據

2.總共多少頁

3.當前頁號

 

 

1.分頁SQL

SELECT * FROM(

SELECT * ,ROW_NUMBER() OVER(ORDER BY ID) AS Num 

FROM tb_01) AS a

WHERE a.Num<=pageSize*pageNum AND a.Num>pageSize*(pageNum-1)

∵每次單擊“上一頁”或“下一頁”的時候都會造成回傳

∴需要在服務器交互中保持當前頁數、排序條件

又∵ApplicationSessionCookie狀態保持都不合適

  ∴需要用到viewstate---頁面級狀態保持

2.ViewState用法

ViewState["名稱"] = ; =>ViewState.Add("名稱",值)

egViewState["Page"] = 0;  =>ViewState.Add("Page", 0);

其實質是在頁面上放置一個隱藏域:

<input type="hidden" name="_VIEWSTATE" value="" />

每次數據回傳,該隱藏於也一起回傳,從而進行狀態信息的保持。

<asp:HiddenField></asp:HiddenField>不同的是,ViewState可以存儲對象,而HiddenField只能存放字符串

PS

不推薦在ViewState中存放大對象,比如在ViewState中存一個含有100條數據的泛型集合,這將明顯降低頁面的呈現速度,因爲隱藏域的內容需要在Web服務器和客戶端瀏覽器之前傳遞;

另外ViewState比較耗資源,∴要在不需要的時候將其關閉:設置該控件的EnableViewStatefalse即可

 

3.A分頁方法一(純代碼控制)
ASP.NET整理:DataList分頁PagedDataSource

ASP.NET整理:DataList分頁PagedDataSource

ASP.NET整理:DataList分頁PagedDataSource

3.B分頁方法二(通過PagedDataSource類)

PagedDataSource.NET內置的分頁類,封裝了數據綁定控件與分頁相關的屬性

常用屬性

CurrentPageIndex

PageCount //總頁數

Count //總記錄數

PageSize

DataSource

AllowPaging

Summary

1.創建PagedDataSource對象pds,並設置pdsAllowPagingtrue

2.設置pdsCurrentPageIndex

3.設置pds的頁尺寸PageSize

4.指定pds的數據源(不能爲datatable或者dataset對象)

5.pds綁定到DataList數據源中

6.DataList進行DataBind();

例子:

public void BindList()

{

//定義一個PagedDataSource實例

PagedDataSource pds = new PagedDataSource();

pds.AllowPaging = true; //設置數據綁定啓用分頁

pds.CurrentPageIndex = CurrentPageIndex; //使用狀態保持保存當前頁數

pds.DataSource = ItemService.GetItems();  //指定PagedDataSource數據源

pds.PageSize = this.pageSize;  //設置每頁記錄數

this.PageCount = pds.PageCount; //pds.PageCount由系統計算出

this.lblPageInfo.Text = "" + CurrentPageIndex + "頁,共" + PageCount + "";

this.dlItems.DataSource = pds;// datalist的數據源設置成PagedDataSource

This.dlItems.DataBind();

}

PSPagedDataSource對象的數據源不能是DataTable或者DataSource對象

二十.GridViewRepeaterDataList三者之間對比

GridView開發效率高,自帶分頁、排序、但佔用資源高

Repeater不提供任何佈局,開發週期長

DataList模板沒有GridView豐富,分頁和排序需要手動編碼

 

DataListRepeater相比,多了編輯和選擇模板

DataListGridView會默認在數據項上添加表格

 

DataList------DataKeyField

GridView-----DataKeyNames

它們2個的取值都是通過DataKeys

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章