Sidindelad repeater
Förord
Denna artikeln beskriver hur man på ett enkelt sätt åstadkommer anpassad sidindelning (eller "paginering") mha Repeaterkontrollen och PagedDataSource klassen.Innehåll
»
Sidindelad repeater
ASP.nets DataGrid är mycket användbar och har automatisk paginering. Tyvärr är DataGriden väldigt stel och ganska arbetsam att anpassa vad gäller layout. I motsats till detta är Repeatern lätt att anpassa, men ganska barskrapad vad gäller funktionalitet.Lösningen? En ofta förbisedd klass som heter PagedDataSource. (Ingår i System.Web.UI.WebControls)
Med PagedDataSource kan du enkelt göra alla datakällor till paginerade sådana.
Såhär arbetar du med den:
PagedDataSource objPDS = new PagedDataSource();
objPDS.DataSource = objDinDataKälla(); // exempelvis ett dataset, datatable, arraylist osv osv.
För att aktivera pagineringen behöver du ställa ett antal egenskaper:
objPDS.AllowPaging = true; // Aktivera paginering på den anslutna datakällan
objPDS.PageSize = 10; // Ställ antal poster som skall visas på varje "sida" av datakällan
Därefter styr du vilken sida som visas via egenskapen "CurrentPageIndex":
objPDS.CurrentPageIndex = 1;
Med hjälp av PagedDataSource kan du exempelvis åstadkomma pagineringsgränssnitt som dessa:
Exempel 1
Exempel 2
Gemensam kod för exempel 1 & 2:
// gastbok.aspx
<%# DataBinder.Eval( Container.DataItem, "Meddelande" ) %>
Exempel 1: Sidnummernavigation
// gastbok.aspx.cs
void Page_Load( object sender, System.EventArgs e ) {
int intSidaID = 0;
DataSet dsGastbok = BLL.HämtaGästbok(); // Ersätt med din metod för att hämta data
// Skapa PageDataSource
PagedDataSource objPDS = new PagedDataSource();
objPDS.DataSource = dsGastbok;
objPDS.AllowPaging = true;
objPDS.PageSize = 10;
// Hämta aktuell sida från Querystring (om den finns)
if (Request.Querystring.Count > 0) {
if (Request.Querystring.Get("sidaid") != null)
intSidaID = int.Parse( Request.Querystring.Get("sidaid") );
}
objPDS.CurrentPageIndex = intSidaID;
repGastbok.DataSource = objPDS;
repGastbok.DataBind();
// Skapa navigation
System.Text.StringBuilder strNavigation = new System.Text.StringBuilder();
strNavigation.Append( "Välj sida: " );
for (int i = 0; i < objPDS.PageCount; i++) {
strNavigation.Append( " strNavigation.Append( i.ToString() );
strNavigation.Append( "\">" );
strNavigation.Append( (i+1).ToString() );
strNavigation.Append( "" );
if ( (i > 0) && (i < objPDS.PageCount) ) {
strNavigation.Append( ", " );
}
}
divNavigation.innerHTML = strNavigation.ToString();
}
Exempel 2: "Föregående & Nästa" navigation
// gastbok.aspx.cs
void Page_Load( object sender, System.EventArgs e ) {
int intSidaID = 0;
DataSet dsGastbok = BLL.HämtaGästbok(); // Ersätt med din metod för att hämta data
// Skapa PageDataSource
PagedDataSource objPDS = new PagedDataSource();
objPDS.DataSource = dsGastbok;
objPDS.AllowPaging = true;
objPDS.PageSize = 10;
// Hämta aktuell sida från Querystring (om den finns)
if (Request.Querystring.Count > 0) {
if (Request.Querystring.Get("sidaid") != null)
intSidaID = int.Parse( Request.Querystring.Get("sidaid") );
}
objPDS.CurrentPageIndex = intSidaID;
repGastbok.DataSource = objPDS;
repGastbok.DataBind();
// Skapa navigation
System.Text.StringBuilder strNavigation = new System.Text.StringBuilder();
if (intSidaID > 0) {
strNavigation.Append( " strNavigation.Append( (intSidaID-1).ToString() );
strNavigation.Append( "\">« Föregående");
}
if (intSidaID < objPDS.PageCount) {
strNavigation.Append( " strNavigation.Append( (intSidaID+1).ToString() );
strNavigation.Append( "\">Nästa »");
}
divNavigation.innerHTML = strNavigation.ToString();
}
För vidare information om PagedDataSource:
0 Kommentarer