<%@ Import Namespace="System"%>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<%@ Import Namespace="sql_functin"%>
前台代码:
<script runat="server">
int totalcount;//总记录数
int currentpage;//当前页
int PageSize = 4;//分页大小
int totalpage;//记录总页数
protected void Page_Load(object sender, EventArgs e)
{
///总记录数
totalcount = sql_functin.PageDS.recordcounts("select * from news");
//当前页
//计算总页数;totalpage
if (totalcount / PageSize == 0)
{
totalpage = totalcount / PageSize;
}
else
{
totalpage = totalcount / PageSize + 1;
}
if (Request.QueryString["page"]==null)///指地址栏中没有PAGE字符
{
currentpage = 1;
}
if (Request.QueryString["page"] != null)
{
// 判断是否为数值
if (sql_functin.querystring.isNumber(Request.QueryString["page"])==false)
{
currentpage = 1;
}
else///是数值
{
if (Request.QueryString["page"].Length > 10 || Request.QueryString["page"].Length < 1)///防止Convert.ToInt32抛出异常或者防止地址栏所得到的page=这样的值
{
currentpage = 1;
//Response.End();
}
else
{
if (Convert.ToInt32(Request.QueryString["page"]) > totalpage)///是否大于总页数
{
currentpage = totalpage;
}
else
{
if (Convert.ToInt32(Request.QueryString["page"]) <=1)///是否小于页数1
{
currentpage = 1;
}
else
{
currentpage = Convert.ToInt32(Request.QueryString["page"]);
}
}
}
}
}
else
{
currentpage = 1;
}
detail.DataSource = sql_functin.PageDS.datas("select * from news",currentpage,PageSize,"news");//填充数据
detail.DataBind();
pagelist.Text = sql_functin.PageDS.pagination(totalcount, PageSize, currentpage, "news_sort2.aspx?ID=" + Request.QueryString["ID"], Convert.ToInt32(Request.QueryString["ID"].ToString()), currentpage, PageSize).ToString();//分页/
}
</script>
<%--HTML代码主体部分--%>
<TABLE cellSpacing=0 cellPadding=0 width=1004 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=107></TD>
<TD width=26 vAlign=top background="image/line1.jpg" style="background-repeat: repeat;"> </TD>
<TD vAlign=top>
<table width="99%">
<tr>
<td colspan="3" align="center"><%--数据绑定--%>
<asp:DataList ID="detail" runat="server" Width="99%">
<HeaderTemplate><TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><TBODY></HeaderTemplate>
<ItemTemplate><tr>
<td width=12 height=8><IMG height="5" src="image/main_but_09_1.gif" width="6"></td>
<td><A href="news_type.aspx?ID=<%#Eval("news_ID") %>"><%#Eval("news_title") %></A> <font color="666666"><%#Eval("news_time") %></font></TD>
</tr>
<tr>
<td colspan="2" background="image/skim.gif" height="1"></td>
</tr></ItemTemplate>
<FooterTemplate></TBODY></TABLE></FooterTemplate>
</asp:DataList><%--数据绑定--%>
</td>
</tr>
<tr>
<td colspan="3" style="width: 715px" align="right"><div align="center">
<%--分页代码--%><asp:Label ID="pagelist" runat="server"></asp:Label><%--分页代码--%></td>
</tr>
</table>
</TD></TR></TBODY></TABLE>
后台代码命名sql_functin空间代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections;
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 System.Data.OleDb;
using Microsoft.VisualBasic;
using System.Data.SqlClient;
using System.Text;
namespace sql_functin
{
public class SQLDB
{
/// <summary>
/// 显示标题栏信息
/// </summary>
///
public string strSQL;///定义公用SQL语句
public static string titless = ConfigurationManager.AppSettings["titles"].ToString();
/// <summary>
/// 调用类结构开始
/// </summary>
public static readonly string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + ConfigurationManager.AppSettings["connectionString"].ToString();
/// #region 数据库连接对象操作
/// <summary>
/// 打开数据库连接 ///针对ACCESS数据库
/// </summary>
public static OleDbConnection opendatabase()
{
try
{
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
return conn;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///#endregion
/// <summary>
/// 关闭数据库连接释放资源
/// </summary>
/// 数据库连接对象
public static void closedatabase(OleDbConnection conn)
{
try
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
///
/// </summary>
/// <param name="strSQL"></param>
/// <returns></returns>
/// #region 返回传入SQL语句而得到的所有具体值
///填充到数据源中
public static DataSet getvalues(string strSQL)
{
try
{
OleDbConnection conn = opendatabase();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn);
da.Fill(ds);
closedatabase(conn);
return ds;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
/// <summary>
/// 返回指定Sql语句的DataTable
/// </summary>
/// <param name="strSQL">传入的Sql语句</param>
/// <returns>DataTable</returns>
public static DataTable getvalues_Datatable(string strSQL)
{
try
{
OleDbConnection conn = opendatabase();
DataTable table = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn);
da.Fill(table);
closedatabase(conn);
return table;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
///调用类结构结束
}
//pageDS用来处理分页
public class PageDS
{
//public static string sqlstrings;
//public static int PageSize=10;//定义分页大小
//public static int pages;//定义总页数
//public static int pagecout;//总的记录条数
//public static int currentpage;
public static int recordcounts(string sqls) ///计算总共有多少条记录
{
string strsqls = sqls;
int allcount = 0;
OleDbConnection conn = sql_functin.SQLDB.opendatabase();
OleDbCommand da = new OleDbCommand(sqls,conn);
OleDbDataReader cms = da.ExecuteReader();
while (cms.Read())
{
allcount += 1;
}
return allcount;
}
public static DataView datas(string sqls,int currentpage,int pagesize,string table)
{
int startcount;
if (currentpage < 1)
{
startcount = currentpage * pagesize;
}
else
{
startcount = (currentpage-1) * pagesize;
}
OleDbConnection conn = sql_functin.SQLDB.opendatabase();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(sqls,conn);
da.Fill(ds, startcount, pagesize,table.ToString());
return ds.Tables[0].DefaultView;
}
/// </summary>
/// <param name="total">总记录数</param>
/// <param name="per">每页记录数</param>
/// <param name="page">当前页数</param>
/// <param name="query_string">Url参数</param>
/// <param name="ID">参数</param>
/// <param name="currentpage">当前页</param>
/// <param name="PageSize">每页分页大小</param>
public static string pagination(int total, int per, int page, string query_string, int ID, int currentpage, int PageSize)
{
int allpage = 0;
int next = 0;
int pre = 0;
int startcount = 0;
int endcount = 0;
string pagestr = "";
if (page < 1) { page = 1; }
//计算总页数
if (per != 0)
{
allpage = (total / per);
allpage = ((total % per) != 0 ? allpage + 1 : allpage);
allpage = (allpage == 0 ? 1 : allpage);
}
next = page + 1;
pre = page - 1;
startcount = (page + 5) > allpage ? allpage - 9 : page - 4;//中间页起始序号
//中间页终止序号
endcount = page < 5 ? 10 : page + 5;
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allpage < endcount) { endcount = allpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "共<font color=/"#ff000/">" + allpage + "</font>页 共有<font color=/"#ff0000/">" + total + "</font>条记录 当前页<font color=/"#ff0000/">" + currentpage + "</font>/" + allpage + " 每页<font color=/"ff0000/">" + PageSize + "</font>条 ";
pagestr += page > 1 ? "<a href=/"" + query_string + "&page=1/">首 页</a> <a href=/"" + query_string + "&page=" + pre + "/">上一页</a>" : "首 页 上一页";
//中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
pagestr += page == i ? " <font color=/"#ff0000/">" + i + "</font>" : " <a href=/"" + query_string + "&page=" + i + "/">" + i + "</a>";
}
pagestr += page != allpage ? " <a href=/"" + query_string + "&page=" + next + "/">下一页</a> <a href=/"" + query_string + "&page=" + allpage + "/">尾 页</a>" : " 下一页 尾 页";
return pagestr;
}
}
/// <summary>
/// 类querystring判断是否为数字
/// </summary>
public class querystring
{
public static bool isNumber(string s)
{
int Flag = 0;
char[] str = s.ToCharArray();
for (int i = 0; i < str.Length; i++)
{
if (Char.IsNumber(str[i]))
{
Flag++;
}
else
{
Flag = -1;
break;
}
}
if (Flag > 0)
{
return true;
}
else
{
return false;
}
}
}
}