核心cs代碼
(list.ascx.css)
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using pweb.SQL;
public partial class list : System.Web.UI.UserControl
{
/// <summary>
/// 要綁定的Datalist的id
/// </summary>
public string DataListID
{
set
{
if (value != null)
{
ViewState["DataListID"] = value;
}
}
get { return ViewState["DataListID"].ToString(); }
}
/// <summary>
/// DataList的分頁項數
/// </summary>
public int PageSize
{
set
{
if(value!=0)
ViewState["pagesize"] = value;
else
ViewState["pagesize"] = 10;
}
get { return Convert.ToInt32( ViewState["pagesize"]); }
}
/// <summary>
/// 設定查詢語句
/// </summary>
public string SelectSQL
{
set
{
if (value != null)
ViewState["SelectSQL"] = value;
}
get { return ViewState["SelectSQL"].ToString(); }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageindex"] = 0;
bing(0);
}
else
{
bingpanel();
}
}
private DataTable Getdate()
{
pweb_SQL pwebsql = new pweb_SQL();
return pwebsql.ReTabel(SelectSQL);
}
protected void bing(int num)
{
Panel1.Controls.Clear();
int pageindex = Convert.ToInt32(ViewState["pageindex"]);
if (ViewState["DateListDataTable"] == null)
{
ViewState["DateListDataTable"] = Getdate();
}
DataTable dt = (DataTable)ViewState["DateListDataTable"];
if (ViewState["pagecount"] == null)
{
int count = dt.Rows.Count;
ViewState["pagecount"] = count / Convert.ToInt32(ViewState["pagesize"]);
if (count % Convert.ToInt32(ViewState["pagesize"])>0)
ViewState["pagecount"] = count / Convert.ToInt32(ViewState["pagesize"]) + 1;
}
DataTable Target = dt.Clone();
for (int i = 0; i < PageSize; i++)
{
int index = i + PageSize * num;
if (index < dt.Rows.Count)
{
Target.ImportRow(dt.Rows[index]);
}
else
break;
}
DataList myDatalist = (DataList)Page.FindControl(DataListID);
myDatalist.DataSource = Target;
myDatalist.DataBind();
bingpanel();
}
protected void bingpanel()
{
//if
int pagecount = Convert.ToInt32(ViewState["pagecount"]);
if (pagecount > 0)
{
int pageindex = Convert.ToInt32(ViewState["pageindex"]);
//資訊
Label Label1 = new Label();
Label1.Text = " ";
Label1.Text += "共有" + ViewState["pagecount"].ToString() + "頁,目前是第 ";
Label1.Text += (pageindex + 1).ToString();
Label1.Text += "頁";
Panel1.Controls.Add(Label1);
Panel1.Controls.Add(new LiteralControl(" "));
//首頁
LinkButton lb = new LinkButton();
lb.ID = "first";
lb.Text = "首頁";
lb.CommandName = "first";
lb.Command += allCommane;
if (pageindex == 0)
lb.Enabled = false;
Panel1.Controls.Add(lb);
Panel1.Controls.Add(new LiteralControl(" "));
//上一頁
lb = new LinkButton();
lb.ID = "pref";
lb.Text = "上一頁";
lb.Command += allCommane;
lb.CommandName = "pref";
if (pageindex == 0)
lb.Enabled = false;
Panel1.Controls.Add(lb);
Panel1.Controls.Add(new LiteralControl(" "));
//添加資料頁
addnum(pageindex);
//下一頁
lb = new LinkButton();
lb.ID = "next";
lb.Text = "下一頁";
lb.Command += allCommane;
lb.CommandName = "next";
if (pageindex == pagecount-1)
lb.Enabled = false;
Panel1.Controls.Add(lb);
Panel1.Controls.Add(new LiteralControl(" "));
//末葉
lb = new LinkButton();
lb.ID = "last";
lb.Text = "末頁";
lb.Command += allCommane;
lb.CommandName = "last";
if (pageindex == pagecount-1)
lb.Enabled = false;
Panel1.Controls.Add(lb);
Panel1.Controls.Add(new LiteralControl(" "));
}
}
private void addnum(int p)
{
int pagecount= Convert.ToInt32(ViewState["pagecount"]);
int maxnum=1;
if (p == 0)
{
if (pagecount >= 4)
maxnum = 4;
else
maxnum = pagecount;
for (int i = 1; i <= maxnum; i++)
{
writenum(i);
}
}
else
{
//寫目前頁前面的頁
if (p - 3 > 0)
{
for (int i = p - 3; i <= p; i++)
writenum(i);
}
else
{
for (int i = 1; i <= p; i++)
{
writenum(i);
}
}
//寫目前頁後面頁
if (pagecount - p > 3)
{
for (int i = p + 1; i <=p+4; i++)
{
writenum(i);
}
}
else
{
for (int i = p + 1; i <=pagecount; i++)
{
writenum(i);
}
}
}
//throw new Exception("The method or operation is not implemented.");
}
private void writenum(int i)
{
LinkButton lb = new LinkButton();
lb.ID = i.ToString();
lb.Text = i.ToString();
lb.Command += allCommane;
lb.CommandName = i.ToString();
if (i-1== Convert.ToInt32(ViewState["pageindex"]))
lb.Enabled = false;
Panel1.Controls.Add(lb);
Panel1.Controls.Add(new LiteralControl(" "));
}
protected void allCommane(object sender, CommandEventArgs e)
{
int pageindex=Convert.ToInt32(ViewState["pageindex"]);
switch(e.CommandName)
{
case "pref":
if (pageindex > 0)
{
ViewState["pageindex"] = pageindex - 1;
}
break;
case "next":
if (pageindex <Convert.ToInt32(ViewState["pagecount"])-1)
{
ViewState["pageindex"] = pageindex + 1;
}
break;
case "first":
ViewState["pageindex"] = 0;
break;
case "last":
ViewState["pageindex"] =Convert.ToInt32( ViewState["pagecount"])-1;
break;
//資料頁
default:
ViewState["pageindex"] = int.Parse(e.CommandName) - 1;
break;
}
bing(Convert.ToInt32(ViewState["pageindex"]));
}
}