大家可能都對datagrid比較熟悉,但是如果在數據量大的時候,我們就得考慮使用 repeater作為我們的數據綁定控件了。Repeater控件與DataGrid (以及DataList)控件的主要區別是在於如何處理HTML。ASP.NET建立HTML代碼以顯示DataGrid控件,但Repeater允許開發人員決定如何顯示數據。所以,你可以選擇將數據顯示在一個HTML表格中或者一個順序列表中。這主要取決於你的選擇,但你必須將正確的HTML插入到 ASP.NET頁面中。
模板與DataList一樣,Repeater控件只支持模板。以下的模板可供選擇:
AlternatingItemTemplate: 指定如何顯示每一其它選項。
ItemTemplate: 指定如何顯示選項。(AlternatingItemTemplate可以覆蓋這一模板。)
HeaderTemplate: 建立如何顯示標題。
FooterTemplate: 建立如何顯示頁腳。
SeparatorTemplate: 指定如何顯示不同選項之間的分隔符。
你可以使用這些模板來顯示你希望的數據。唯一具有強制性的模板是ItemTemplate,所有其它的模板都是具有選擇性的。
對於處理一個數據源,Repeater控件具有與DataGrid與DataList相同的屬性:
DataMember:獲得或者設置與 Repeater 控件綁定的相應DataSource屬性的表格。
DataSource:獲得或者設置為 Repeater 顯示提供數據的數據源。
除此之外,還有一個Items屬性,你可以通過這一屬性編程訪問Repeater數據中單一選項。它返回一個RepeaterItemCollection對象,為一組RepeaterItem對象的集合,代表 Repeater 數據的每一行。
ASP.NET Web數據控件還有其它一個共性:它們都使用DataBind方法來生成用戶界面。調用這一方法可以返回並顯示數據(假設DataSource和 DataMember屬性設置正確)。在查看DataBind方法之前,我們先看看如何在一個Web頁面中使用一個Repeater控件。
使用Repeater控件
使用Repeater控件的第一步驟是決定我們將要使用的數據源和字段。例如,我們將要使用SQL Server Northwind數據庫中的Employees列表。Web頁面將顯示職工的完整名字,地址,以及電話號碼。HTML將使用DIV標記,用 Repeater 模板來分隔內容。下面是 Web 頁面的 HTML 內容:
前台代碼
代碼如下 | 復制代碼 |
<asp:Repeater ID="Repeater1" runat="server"> |
后台代碼
代碼如下 | 復制代碼 |
string sql = string.Format("select * from person"); DataTable dt = sqlhelper.helper.ExecuteQuery(sql); Repeater1.DataSource = dt; Repeater1.DataBind(); |
AspNetpager的使用方法:
首先注冊<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
前台:
代碼如下 | 復制代碼 |
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" CustomInfoHTML="第%CurrentPageIndex%頁,共%PageCount%頁,每頁%PageSize%條" FirstPageText="首頁" LastPageText="尾頁" LayoutType="Table" NextPageText="下一頁" onpagechanging="AspNetPager1_PageChanging" PageIndexBoxType="DropDownList" PagingButtonLayoutType="Span" PrevPageText="上一頁" ShowCustomInfoSection="Left" ShowPageIndexBox="Always" SubmitButtonText="Go" TextAfterPageIndexBox="頁" TextBeforePageIndexBox="轉到" Width="450px" PageSize="3"> </webdiyer:AspNetPager> |
后台:
代碼如下 | 復制代碼 |
private void AddPages(Repeater rpt,Wuqi.Webdiyer.AspNetPager anp,DataTable dt) { PagedDataSource pds = new PagedDataSource(); pds.AllowPaging = true; pds.DataSource = dt.DefaultView; anp.RecordCount = dt.Rows.Count;//給分頁控件指定當前總數 pds.PageSize = anp.PageSize;//確定分頁,每頁有n項 pds.CurrentPageIndex = anp.CurrentPageIndex - 1;//確定當前頁數 rpt.DataSource = pds;//綁定數據源 rpt.DataBind(); } protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e) { AspNetPager1.CurrentPageIndex = e.NewPageIndex; BindPersonData(); } |
例子
repeater控件動態添加、刪除一行
代碼如下 | 復制代碼 |
<script type="text/javascript"> // //審批用戶控件中保存發放的EquipmentId var tempReturnValue = ""; |
Repeater:
代碼如下 | 復制代碼 |
<div id="div_Repeater"> |
后台:
代碼如下 | 復制代碼 |
/// <summary> rptRequest.DataSource = dt;
//for (int i = 0; i < dt_EquipmentRequestItem.Rows.Count; i++)
//為第一行加載一些數據 /// <summary> protected void rptRequest_ItemCommand(object source, RepeaterCommandEventArgs e) //首先,恢復數據源 if (lblGuid.Text == ((System.Web.UI.WebControls.Label)item.FindControl("lblGuid")).Text) rptRequest.DataSource = dt; //首先,恢復數據源 rptRequest.DataSource = dt; protected void rptRequest_ItemDataBound(object sender, RepeaterItemEventArgs e) string sqlstr = @"select distinct b.TypeId,b.EquipmentName + '_' + b.EquipmentType as 'EquipmentName_EquipmentType'
string sqlstr2 = @"select NodeId,Line + '_' + StationName as 'Line_StationName' from V_Stations where status='1' order by Line_StationName";
string businessNo = Request["BusinessNo"].ToString(); if (dt.Rows.Count != 0 && dt.Rows[0]["LayerName"].ToString() == "資產管理員") } |