天天看點

DataList也來分頁??

核心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("&nbsp;"));

            //首頁

            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("&nbsp;"));

            //上一頁

            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("&nbsp;"));

            //添加資料頁

            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("&nbsp;"));

            //末葉

            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("&nbsp;"));

        }

    }

    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("&nbsp;"));

    }

    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"]));

    }

}