十八.DataList控件
保存主鍵的方式:1.DataKeyField
2.設置隱藏域<asp:HiddenField runat="server" id="hdid" value='<%# eval_r("id")%>' />
屬性:
RepeatColumns:顯示的列數,默認爲0,表示單行/單列
RepeatDirection:Horizontal:水平;Vertical:垂直
<asp:DataList runat="server" id="dlItems" GridLines="both" CssClass="margin" RepeatColumns=2" RepeatDirection="Horizontal" />
DataList的ItemCommand事件相當於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)
∵每次單擊“上一頁”或“下一頁”的時候都會造成回傳
∴需要在服務器交互中保持當前頁數、排序條件
又∵Application、Session和Cookie狀態保持都不合適
∴需要用到viewstate---頁面級狀態保持
2.ViewState用法
ViewState["名稱"] = 值; =>ViewState.Add("名稱",值)
eg:ViewState["Page"] = 0; =>ViewState.Add("Page", 0);
其實質是在頁面上放置一個隱藏域:
<input type="hidden" name="_VIEWSTATE" value="" />
每次數據回傳,該隱藏於也一起回傳,從而進行狀態信息的保持。
與<asp:HiddenField></asp:HiddenField>不同的是,ViewState可以存儲對象,而HiddenField只能存放字符串
PS:
不推薦在ViewState中存放大對象,比如在ViewState中存一個含有100條數據的泛型集合,這將明顯降低頁面的呈現速度,因爲隱藏域的內容需要在Web服務器和客戶端瀏覽器之前傳遞;
另外ViewState比較耗資源,∴要在不需要的時候將其關閉:設置該控件的EnableViewState爲false即可
3.A分頁方法一(純代碼控制)
3.B分頁方法二(通過PagedDataSource類)
PagedDataSource是.NET內置的分頁類,封裝了數據綁定控件與分頁相關的屬性
常用屬性
CurrentPageIndex
PageCount //總頁數
Count //總記錄數
PageSize
DataSource
AllowPaging
Summary:
1.創建PagedDataSource對象pds,並設置pds的AllowPaging爲true
2.設置pds的CurrentPageIndex
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();
}
PS:PagedDataSource對象的數據源不能是DataTable或者DataSource對象
二十.GridView,Repeater和DataList三者之間對比
GridView:開發效率高,自帶分頁、排序、但佔用資源高
Repeater:不提供任何佈局,開發週期長
DataList:模板沒有GridView豐富,分頁和排序需要手動編碼
DataList和Repeater相比,多了編輯和選擇模板
DataList和GridView會默認在數據項上添加表格
DataList------DataKeyField
GridView-----DataKeyNames
它們2個的取值都是通過DataKeys
- (2012-09-08 13:09:19)
- (2012-09-08 13:09:05)
- (2012-09-08 13:04:14)
- (2012-09-08 12:54:54)
- (2012-09-08 12:52:01)
- (2012-09-08 12:48:53)
- (2012-09-08 12:46:40)
- (2012-09-03 20:54:24)
- (2012-09-02 12:48:05)
- (2012-07-26 15:42:32)