从数据库读取数据(不用控件)自动分页原代码

来源:互联网 发布:新疆网络干部学院 编辑:程序博客网 时间:2024/05/10 21:57

       给数据分页多种,通常采用控件做较为简单,但速度相对较慢;我们在做网页时经常会遇数据分页问题,以下我做了一个手机查看某平台上新闻(TITLE)列表的例子,从后台读取数据不使用任何控件;

前台定义:

    <div>新闻列表</div>
    <div>  <%=NewTitle%> </div>
    <div> <%=NewCreatepagestr %> </div>后台代码:

后台代码:

using System.Data.OracleClient;
using System.Text.RegularExpressions;
using System.Text;


public partial class News_Info : System.Web.UI.Page
{
    public static string ConnectionString = "Data Source=ORCL18;user =delit;password=delit;";
    public static OracleConnection con = new OracleConnection(ConnectionString);
    public string NewCreatepagestr = null;
    public string NewTitle = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        PageSize = PageSize == 0 ? 10 : PageSize;//10表示每页显示的条数
        Count = GetCount();
        PageCount = GetPageCount(Count, PageSize);//新闻一共需要分多少页
        NowPage = GetNowPage();//新闻当前页是;
        NewCreatepagestr = CreatePageLink(NowPage, PageCount);//新闻
        NewTitleList();
    }
    /// <summary>
    /// 新闻每页显示数据量
    /// </summary>
    public int PageSize;
    /// <summary>
    /// 新闻总数;
    /// </summary>
    int Count;
    /// <summary>
    /// 新闻当前页;
    /// </summary>
    int NowPage;
    /// <summary>
    /// 返回新闻一共有多少条数据。
    /// </summary>
    int GetCount()
    {
        int num = 0;
        DataSet ds = new DataSet();
        string sql = "select count(*) as num from news_info";
        OracleCommand cmd = new OracleCommand(sql, con);
        OracleDataAdapter da = new OracleDataAdapter(cmd);
        da.Fill(ds);
        num = int.Parse(ds.Tables[0].Rows[0]["num"].ToString());
        return num;
    }
    /// <summary>
    /// 新闻一共需要分多少页;
    /// </summary>
    int PageCount;

    /// <summary>
    /// 新闻返回一共需要分多少页。
    /// </summary>
    int GetPageCount(int Count, int pageSize)
    {
        if (Count != 0)
            PageCount = (int)Math.Ceiling((double)Count / PageSize);
        else
            PageCount = 1;
        return PageCount;
    }
    /// <summary>
    /// 新闻返回当前页。
    /// </summary>
    int GetNowPage()
    {
        string a = Request.QueryString["page"];
        int tempNowPage;
        if (Request.QueryString["page"] != null &&
            Request.QueryString["page"] != "" &&
            Regex.IsMatch(Request.QueryString["page"], @"^[+-]?\d*$") &&
            int.Parse(Request.QueryString["page"]) <= PageCount)
            tempNowPage = int.Parse(Request.QueryString["page"]);
        else
            tempNowPage = 1;
        return tempNowPage;
    }
    /// <summary>
    /// 新闻分页
    /// </summary>
    protected string CreatePageLink(int NowPage, int PageCount)
    {
        if (PageCount != 1 || PageCount == 1)
        {
            StringBuilder sb = new StringBuilder("");
            int pre = NowPage - 1;
            if (pre == 0)
            {
                pre = 1;
            }
            //分页字符串
            //上一页
            sb.Append("<a href=News_Info_List.aspx?page=" + pre.ToString() + ">上一页</a>\r\n");
            int minpage = 1;
            if (PageCount >= 10 && NowPage >= PageCount - 5)
            {
                minpage = NowPage - (4 + (NowPage - (PageCount - 5)));
            }
            else if (PageCount >= 10 && NowPage >= 5)
            {
                minpage = NowPage - 4;
            }
            if (PageCount >= 10)
                for (int i = 0; i < 10; i++)
                {
                    if (minpage != NowPage)
                    {
                        sb.Append("<a href=News_Info_List.aspx?page=" + minpage.ToString() + ">" + minpage.ToString() + "</a>\r\n");
                    }
                    else
                    {
                        sb.Append("<a class=\"orange\">" + NowPage.ToString() + "</a>\r\n");//orange 当前页数字的样式 自己设定 比如 上一页 1 2 下一页  当前页是第2 页  这里样式 设置的是红色 则数字2就是红色
                    }
                    minpage++;
                }
            {
                int minpage0 = 1;
                for (int i = 0; i < PageCount; i++)
                {

                    if (minpage0 != NowPage)
                    {
                        sb.Append("<a href=News_Info_List.aspx?page=" + minpage0.ToString() + ">" + minpage0.ToString() + "</a>\r\n");

                    }
                    else
                    {
                        sb.Append("<a class=\"orange\">" + NowPage.ToString() + "</a>\r\n");//orange 当前页数字的样式 自己设定 比如 上一页 1 2 下一页  当前页是第2 页  这里样式 设置的是红色 则数字2就是红色
                    }
                    minpage0++;
                }
            }
            int last = NowPage + 1;
            if (last >= PageCount)
            {
                last = PageCount;
            }
            sb.Append("<a href=News_Info_List.aspx?page=" + last.ToString() + ">下一页</a>\r\n");
            NewCreatepagestr = sb.ToString();//新闻
            //得到的字符串NewCreatepagestr 后面一段放在前台 <div><%=NewCreatepagestr%></div>   得到的效果就是  上一页 1 2 3 下一页
        }
        return NewCreatepagestr;
    }
    /// <summary>
    /// 获取新闻TITLE值;
    /// </summary>
    protected void NewTitleList()
    {
        string str = null;
        DataTable dt = new DataTable();
        string sql = string.Format("select * from (select b.*,rownum as rowNumber from (select ID,INPUT_TIME,TITLE from news_info order by INPUT_TIME desc) b) c  where rowNumber>{0} and rowNumber<={1}", (NowPage - 1) * PageSize, PageSize * NowPage);
        DataSet ds = new DataSet();//问题:如果将DataSet ds = new DataSet()取消,获取上面的,那么数据会重复显示;
        OracleCommand cmd = new OracleCommand(sql, con);
        OracleDataAdapter da = new OracleDataAdapter(cmd);
        da.Fill(ds);
        dt = ds.Tables[0];

        if (dt.Rows.Count > 0)
        {
            str += "<table border='1' style='background-color:Gray; width:260px; border-color:White; border-style:solid;'>";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string title = dt.Rows[i]["title"].ToString();
                string id = dt.Rows[i]["ID"].ToString();
                str += "<tr><td> <a href='../ParticuContent/News_Contents.aspx?ID="+ id +"'>" + title + "</a></td></tr>";
            }
            str += "</table>";
        }
        NewTitle = str;
    }

}

运行结果: