给数据分页多种,通常采用控件做较为简单,但速度相对较慢;我们在做网页时经常会遇数据分页问题,以下我做了一个手机查看某平台上新闻(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;
}
}
运行结果: