Nu har jag fixat en lösning som fungerar som paging. Enda problemet är att alla poster ändå hämtas från databasen, vilket ju inte är meningen...
Koden ser ut så här:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using DatabaseUtilities;
namespace eShop
{
/// <summary>
/// Summary description for products.
/// </summary>
public class Products : System.Web.UI.Page
{
protected DataList ShowProducts;
protected Label pageLinks;
private const int pageSize = 6;
private int categoryId;
public Products()
{
Page.Init += new System.EventHandler(Page_Init);
}
private void Page_Init(object sender, EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
}
private void Page_Load(object sender, System.EventArgs e)
{
if(Request.QueryString["categoryid"] != null)
{
categoryId = Convert.ToUInt16(Request.QueryString["categoryid"]);
BindData();
}
else
{
//Felhantering
}
}
private void BindData()
{
DbUtil db = new DbUtil();
DataSet ds = new DataSet();
string sql = "SELECT * FROM Products WHERE CategoryID = " + Request.QueryString["categoryid"];
db.getRecords(ds,sql,"Products");
ShowProducts.DataSource = PageRecords(ref ds);
ShowProducts.DataBind();
}
private DataView PageRecords(ref DataSet orgDs)
{
int productCount = orgDs.Tables["Products"].Rows.Count;
int pages = (productCount - (productCount % 6)) / 6;
int pageNumber = 1;
if (productCount % 6 > 0)
pages++;
if (Request.QueryString["page"] != null)
{
pageNumber = Convert.ToInt32(Request.QueryString["page"]);
}
//Skapar länkarna
pageLinks.Text = "[ ";
for (uint j = 0;j < pages;j++)
{
pageLinks.Text += "<a href=products.aspx?categoryid="+categoryId+"&page="+(j+1)+">"+(j+1)+"</a> ";
}
pageLinks.Text += " ]";
//Bygger upp den data som ska visas
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32))); //ID
dt.Columns.Add(new DataColumn("CategoryID", typeof(Int32))); //CategoryID
dt.Columns.Add(new DataColumn("Name", typeof(string))); //Name
dt.Columns.Add(new DataColumn("Description", typeof(string))); //Description
dt.Columns.Add(new DataColumn("Thumbnail", typeof(string))); //Thumbnail
dt.Columns.Add(new DataColumn("3D", typeof(bool))); //3D
dt.Columns.Add(new DataColumn("Price", typeof(string))); //Price
DataRow dr;
int recordNumber = 0; //Den position man ska börja räkna ifrån
if(pageNumber > 1)
{
recordNumber = (pageNumber * pageSize) - pageSize;
}
for (int i = recordNumber;i < pageSize * pageNumber;i++)
{
if (i > productCount - 1) //Ser till att det finns data
break;
dr = dt.NewRow();
dr[0] = orgDs.Tables["Products"].Rows[i]["ID"]; //ID
dr[1] = orgDs.Tables["Products"].Rows[i]["CategoryID"]; //CategoryID
dr[2] = orgDs.Tables["Products"].Rows[i]["Name"]; //Name
dr[3] = orgDs.Tables["Products"].Rows[i]["Description"]; //Description
dr[4] = orgDs.Tables["Products"].Rows[i]["Thumbnail"]; //Thumbnail
dr[5] = orgDs.Tables["Products"].Rows[i]["3D"]; //3D
dr[6] = orgDs.Tables["Products"].Rows[i]["Price"]; //Price
dt.Rows.Add(dr);
}
return new DataView(dt);
}
#region Web Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Är det någon har ett tips?
------------------
mvh André
