分页用户控件

参考http://www.cnblogs.com/hongyuniu/archive/2008/08/05/1261014.html

前台代码

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<div style="text-align:right; width:100%;background-color:#c6d7ef">
<table cellpadding="0" cellspacing="0">
    <tr>
        <td style="width: 200px; text-align: right">
            <asp:Label ID="Label1" runat="server" Text="当前页:"></asp:Label><asp:Label ID="lblCurrentInfo"
                runat="server">1</asp:Label>&nbsp; &nbsp;<asp:Label ID="Label2" runat="server" Text=""></asp:Label><asp:Label ID="lblCount"
                runat="server">1</asp:Label><asp:Label ID="Label3" runat="server" Text=""></asp:Label><asp:Label
                    ID="lblTotalNum" runat="server">5</asp:Label><asp:Label ID="Label5" runat="server" Text=""></asp:Label>
            &nbsp; &nbsp;
        </td>
        <td style="width: 33px">
            <asp:LinkButton ID="lbtnFirst" runat="server" OnClick="PageIndex_Changed">首页</asp:LinkButton></td>
        <td style="width: 50px">
            <asp:LinkButton ID="lbtnPrev" runat="server" OnClick="PageIndex_Changed">上一页</asp:LinkButton></td>
        <td style="width: 50px">
            <asp:LinkButton ID="lbtnNext" runat="server" OnClick="PageIndex_Changed">下一页</asp:LinkButton></td>
        <td style="width: 33px">
            <asp:LinkButton ID="lbtnLast" runat="server" OnClick="PageIndex_Changed">末页</asp:LinkButton></td>
    </tr>
</table></div>
View Code

后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

public partial class WebUserControl : System.Web.UI.UserControl
{
    #region Properties
    [BrowsableAttribute(true)]
    [DescriptionAttribute("要绑定数据的GridView.ID")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Appearance")]
    public string gvID
    {
        get
        {
            return (ViewState["gvID"] == null) ? "" : ViewState["gvID"].ToString();
        }
        set
        {
            ViewState["gvID"] = value;
        }
    }

    [BrowsableAttribute(true)]
    [DescriptionAttribute("每一页显示的行数,默认每页10条")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Appearance")]
    public int PageSize
    {
        get
        {
            return (ViewState["PageSize"] == null) ? 10 : Convert.ToInt32(ViewState["PageSize"]);
        }
        set
        {
            ViewState["PageSize"] = value;
        }
    }

    [BrowsableAttribute(true)]
    [DescriptionAttribute("要从中读取数据的DataTable.Name")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Data")]
    public string TableName
    {
        get
        {
            return (ViewState["TableName"] == null) ? "" : ViewState["TableName"].ToString();
        }
        set
        {
            ViewState["TableName"] = value;
        }
    }

    [BrowsableAttribute(true)]
    [DescriptionAttribute("要从中读取数据的DataTable.Name")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Data")]
    public string OrderBy
    {
        get
        {
            return (ViewState["OrderBy"] == null) ? "" : ViewState["OrderBy"].ToString();
        }
        set
        {
            ViewState["OrderBy"] = value;
        }
    }
    public string PrimaryKey
    {
        get
        {
            return (ViewState["PrimaryKey"] == null) ? "" : ViewState["PrimaryKey"].ToString();
        }
        set
        {
            ViewState["PrimaryKey"] = value;
        }
    }
    [BrowsableAttribute(true)]
    [DescriptionAttribute("读取数据的Sql语句,多表 联合查询")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Data")]
    public string Sql
    {
        get
        {
            return (ViewState["Sql"] == null) ? "" : ViewState["Sql"].ToString();
        }
        set
        {
            ViewState["Sql"] = value;
        }
    }

    [BrowsableAttribute(true)]
    [DescriptionAttribute("过滤条件,可以为空")]
    [DefaultValueAttribute("")]
    [CategoryAttribute("Data")]
    public string FilterString
    {
        get
        {
            return (ViewState["FilterString"] == null) ? "" : ViewState["FilterString"].ToString();
        }
        set
        {
            ViewState["FilterString"] = value;
        }
    }

    [BrowsableAttribute(false)]
    [DescriptionAttribute("当前页数")]
    [DefaultValueAttribute("")]
    public int CurrentInfo
    {
        get
        {
            return Convert.ToInt32(lblCurrentInfo.Text.Trim());
        }
    }
    #endregion
    SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString);
   // OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString);
   // OleDbCommand comm = new OleDbCommand();
    SqlCommand comm = new SqlCommand();
    string sql = "";

    protected override void OnInit(EventArgs e)
    {
        this.Visible = false;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //this.lbtnPrev.Enabled = false;
            //this.lblCurrentInfo.Text = "1";
        }
    }

    /// <summary>
    /// 绑定GridView控件,供页面调用
    /// </summary>
    public void BindGridView()
    {
        GetPageNum();
        //this.Visible = false;
        this.lbtnPrev.Enabled = false;
        this.lblCurrentInfo.Text = "1";
        BindGV();
    }

    /// <summary>
    /// 绑定GridView控件,供页面调用
    /// </summary>
    /// <param name="currentInfo">要显示的当前页</param>
    public void BindGridView(int currentInfo)
    {
        GetPageNum();

        //this.Visible = false;
        this.lbtnPrev.Enabled = false;
        this.lblCurrentInfo.Text = currentInfo.ToString();
        BindGV();
    }

    /// <summary>
    /// 获取结果总数目和总页数
    /// </summary>
    /// <returns>总页数</returns>
    public int GetPageNum()
    {
        sql = "";
        sql += "select count(*) from ( ";
        sql += Sql;
        sql += FilterString + ") as a ";
        comm.CommandText = sql;
        comm.Connection = conn;
        conn.Open();
        int TotalNum = Convert.ToInt32(comm.ExecuteScalar());
        conn.Close();
        lblTotalNum.Text = TotalNum.ToString();
        int pageNum = Convert.ToInt32(Math.Ceiling(Convert.ToDouble((double)TotalNum / PageSize)));
        lblCount.Text = pageNum.ToString();

        return TotalNum;
    }

    #region 按钮处理事件
    /**/
    /// <summary>
    /// 按钮处理事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void PageIndex_Changed(object sender, EventArgs e)
    {
        LinkButton linkbtn = (LinkButton)sender;
        switch (linkbtn.ID.Trim())
        {
            case "lbtnFirst":
                this.lblCurrentInfo.Text = "1";

                BindGV();

                break;
            case "lbtnPrev":

                this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) - 1).ToString();


                BindGV();

                break;
            case "lbtnNext":

                this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) + 1).ToString();

                BindGV();

                break;
            case "lbtnLast":
                this.lblCurrentInfo.Text = this.lblCount.Text;

                BindGV();

                break;
        }
        SetBtnState();
    }
    private void SetBtnState()
    {
        if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text) && Convert.ToInt32(this.lblCurrentInfo.Text) <= 1)
        {
            this.lbtnPrev.Enabled = false;
            this.lbtnNext.Enabled = false;
            this.lbtnFirst.Enabled = false;
            this.lbtnLast.Enabled = false;
        }
        else if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text))
        {
            this.lbtnPrev.Enabled = true;
            this.lbtnNext.Enabled = false;
            this.lbtnFirst.Enabled = true;
            this.lbtnLast.Enabled = false;
        }
        else if (Convert.ToInt32(this.lblCurrentInfo.Text) <= 1)
        {
            this.lbtnPrev.Enabled = false;
            this.lbtnNext.Enabled = true;
            this.lbtnFirst.Enabled = false;
            this.lbtnLast.Enabled = true;
        }
        else
        {
            this.lbtnPrev.Enabled = true;
            this.lbtnNext.Enabled = true;
            this.lbtnFirst.Enabled = true;
            this.lbtnLast.Enabled = true;
        }
    }
    #endregion

    /// <summary>
    /// 获取数据绑定GridView
    /// </summary>
    private void BindGV()
    {
        int lower, upper;
        int currentPage = Convert.ToInt32(lblCurrentInfo.Text.Trim());
        lower = (currentPage - 1) * PageSize;
        upper = lower + PageSize;

        DataTable dt = new DataTable();
        sql = "";
        sql += "select top " + PageSize.ToString() + " * from (" + Sql + FilterString +  ") as a ";
        if (lower > 0)
        {
            sql += " where " + PrimaryKey + " not in (select top " + lower.ToString() + " " + PrimaryKey + " from (" + Sql + FilterString + ") as b)";
        }
        sql += ""+OrderBy+"";
        comm.CommandText = sql;
        comm.Connection = conn;
       // OleDbDataAdapter da = new OleDbDataAdapter(comm);
        SqlDataAdapter da = new SqlDataAdapter(comm);
        conn.Open();
        da.Fill(dt);
        conn.Close();

        if (dt.Rows.Count == 0)
        {
            this.Visible = false;
        }
        else
        {
            this.Visible = true;
        }
        GridView gv = (GridView)Page.FindControl(gvID);
        gv.DataSource = dt;
        gv.DataBind();
        SetBtnState();
    }

 
}
View Code

页面引用:

<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>

 

gridview下面

  <uc1:WebUserControl ID="WebUserControl1" runat="server" />

页面后台:

绑定
            string sql = "select * from employee";
            WebUserControl1.gvID = GridView1.ClientID;
            WebUserControl1.Sql = sql;
            WebUserControl1.OrderBy = "order by emplID ";
            WebUserControl1.PrimaryKey = "emplID";
            WebUserControl1.BindGridView();       

 

posted on 2013-05-29 17:22  小景  阅读(161)  评论(0编辑  收藏  举报