一,首先创建分页存储过程
CREATE PROCEDURE usp_PagingLarge @TableNames VARCHAR(300), --表名,可以是多个表,但不能用别名 @PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空 @Fields VARCHAR(350), --要取出的字段,可以是多个表的字段,可以为空,为空表示select * @PageSize INT, --每页记录数 @CurrentPage INT, --当前页,0表示第1页 @Filter VARCHAR(200) = '', --条件,可以为空,不用填 where @Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by @Order VARCHAR(200) = '', --排序,可以为空,为空默认按主键升序排列,不用填 order by @RecordCount int = 0 output AS BEGIN DECLARE @SortColumn VARCHAR(200) DECLARE @Operator CHAR(2) DECLARE @SortTable VARCHAR(200) DECLARE @SortName VARCHAR(200) DECLARE @TmpSelect NVarchar(200) IF @Fields = '' SET @Fields = '*' IF @Filter = '' SET @Filter = 'WHERE 1=1' ELSE SET @Filter = 'WHERE ' + @Filter IF @Group <>'' SET @Group = 'GROUP BY ' + @Group IF @Order <> '' BEGIN DECLARE @pos1 INT, @pos2 INT SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC') IF CHARINDEX(' DESC', @Order) > 0 IF CHARINDEX(' ASC', @Order) > 0 BEGIN IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order) SET @Operator = '<=' ELSE SET @Operator = '>=' END ELSE SET @Operator = '<=' ELSE SET @Operator = '>=' SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '') SET @pos1 = CHARINDEX(',', @SortColumn) IF @pos1 > 0 SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1) SET @pos2 = CHARINDEX('.', @SortColumn) IF @pos2 > 0 BEGIN SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1) IF @pos1 > 0 SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1) ELSE SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2) END ELSE BEGIN SET @SortTable = @TableNames SET @SortName = @SortColumn END END ELSE BEGIN SET @SortColumn = @PrimaryKey SET @SortTable = @TableNames SET @SortName = @SortColumn SET @Order = @SortColumn SET @Operator = '>=' END DECLARE @type varchar(50) DECLARE @prec int SELECT @type=t.name, @prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOIN systypes t on c.xusertype=t.xusertype WHERE o.name = @SortTable AND c.name = @SortName IF CHARINDEX('char', @type) > 0 SET @type = @type + '(' + CAST(@prec AS varchar) + ')' DECLARE @TopRows INT SET @TopRows = @PageSize * @CurrentPage + 1 print @TopRows print @Operator EXEC(' DECLARE @SortColumnBegin ' + @type + ' SET ROWCOUNT ' + @TopRows + ' SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + ' SET ROWCOUNT ' + @PageSize + ' SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + ' ') DECLARE @str_Count_SQL nvarchar(500) SET @str_Count_SQL= 'SELECT @TotalCount=count('+@PrimaryKey+') FROM ' + @TableNames + ' ' + @Filter EXEC sp_executesql @str_Count_SQL,N'@TotalCount int=0 output',@RecordCount output End GO
二,编写sqlHelper方法
/// <summary> /// 执行存储过程返回 DataTable /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>DataTable</returns> public static DataTable ExecuteDataTableByProc(string storedProcName, SqlParameter[] parameters) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); SqlDataAdapter da = new SqlDataAdapter(); DataSet ds = new DataSet(); da.SelectCommand = command; da.Fill(ds); DataTable dt = ds.Tables[0]; return dt; } } /// <summary> /// 执行存储过程返回SqlDataReader /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlDataReader</returns> public static SqlDataReader ExecuteSqlDataReaderByProc(string storedProcName, SqlParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); return returnReader; } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name="connection">数据库连接</param> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName, SqlParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) command.Parameters.Add( parameter ); return command; }
CREATE PROCEDURE usp_PagingLarge @TableNames VARCHAR(300), --表名,可以是多个表,但不能用别名 @PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空 @Fields VARCHAR(350), --要取出的字段,可以是多个表的字段,可以为空,为空表示select * @PageSize INT, --每页记录数 @CurrentPage INT, --当前页,0表示第1页 @Filter VARCHAR(200) = '', --条件,可以为空,不用填 where @Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by @Order VARCHAR(200) = '', --排序,可以为空,为空默认按主键升序排列,不用填 order by @RecordCount int = 0 output AS BEGIN DECLARE @SortColumn VARCHAR(200) DECLARE @Operator CHAR(2) DECLARE @SortTable VARCHAR(200) DECLARE @SortName VARCHAR(200) DECLARE @TmpSelect NVarchar(200) IF @Fields = '' SET @Fields = '*' IF @Filter = '' SET @Filter = 'WHERE 1=1' ELSE SET @Filter = 'WHERE ' + @Filter IF @Group <>'' SET @Group = 'GROUP BY ' + @Group IF @Order <> '' BEGIN DECLARE @pos1 INT, @pos2 INT SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC') IF CHARINDEX(' DESC', @Order) > 0 IF CHARINDEX(' ASC', @Order) > 0 BEGIN IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order) SET @Operator = '<=' ELSE SET @Operator = '>=' END ELSE SET @Operator = '<=' ELSE SET @Operator = '>=' SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '') SET @pos1 = CHARINDEX(',', @SortColumn) IF @pos1 > 0 SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1) SET @pos2 = CHARINDEX('.', @SortColumn) IF @pos2 > 0 BEGIN SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1) IF @pos1 > 0 SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1) ELSE SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2) END ELSE BEGIN SET @SortTable = @TableNames SET @SortName = @SortColumn END END ELSE BEGIN SET @SortColumn = @PrimaryKey SET @SortTable = @TableNames SET @SortName = @SortColumn SET @Order = @SortColumn SET @Operator = '>=' END DECLARE @type varchar(50) DECLARE @prec int SELECT @type=t.name, @prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOIN systypes t on c.xusertype=t.xusertype WHERE o.name = @SortTable AND c.name = @SortName IF CHARINDEX('char', @type) > 0 SET @type = @type + '(' + CAST(@prec AS varchar) + ')' DECLARE @TopRows INT SET @TopRows = @PageSize * @CurrentPage + 1 print @TopRows print @Operator EXEC(' DECLARE @SortColumnBegin ' + @type + ' SET ROWCOUNT ' + @TopRows + ' SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + ' SET ROWCOUNT ' + @PageSize + ' SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + ' ') DECLARE @str_Count_SQL nvarchar(500) SET @str_Count_SQL= 'SELECT @TotalCount=count('+@PrimaryKey+') FROM ' + @TableNames + ' ' + @Filter EXEC sp_executesql @str_Count_SQL,N'@TotalCount int=0 output',@RecordCount output End GO
二,编写sqlHelper方法
/// <summary> /// 执行存储过程返回 DataTable /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>DataTable</returns> public static DataTable ExecuteDataTableByProc(string storedProcName, SqlParameter[] parameters) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); SqlDataAdapter da = new SqlDataAdapter(); DataSet ds = new DataSet(); da.SelectCommand = command; da.Fill(ds); DataTable dt = ds.Tables[0]; return dt; } } /// <summary> /// 执行存储过程返回SqlDataReader /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlDataReader</returns> public static SqlDataReader ExecuteSqlDataReaderByProc(string storedProcName, SqlParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); return returnReader; } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name="connection">数据库连接</param> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName, SqlParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) command.Parameters.Add( parameter ); return command; }
数据库层代码如下:
前台页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>存储过程分页</title> <meta http-equiv="Content-Language" content="zh-CN" /> <meta content="all" name="MyWeb" /> <meta name="author" content="晴儿" /> <meta name="Copyright" content="版权归晴儿所有" /> <meta name="description" content="晴儿个人网站系统" /> <meta content="文章,新闻,相册,实用工具" name="keywords" /> <meta content="文章,新闻,相册,实用工具" name="searchtitle" /> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <link href="../images/style.css" type="text/css" rel="stylesheet" /> <script language="javascript" type="text/javascript" src="../Script/DateOperate.js"></script> <script language="javascript" type="text/javascript" src="../Script/calendar.js"></script> <script language="javascript" type="text/javascript"> function check() { var checks=false; var innar=document.getElementsByTagName("input"); for(var i=0;i<innar.length;i++) { if(innar.type=="checkbox") { if(innar.checked==true) checks=true; } } if(checks==false) { alert("您未选中任何记录!"); return false; } else { return confirm('您确定要删除所有选中的记录吗?'); return true; } } function quanxuan() { var innar=document.getElementsByTagName("input"); for(var i=0;i<innar.length;i++) { if(innar.type=="checkbox") innar.checked=true; } } function fanxuan() { var innar=document.getElementsByTagName("input"); for(var i=0;i<innar.length;i++) { if(innar.type=="checkbox") { if(innar.checked==true) innar.checked=false; else innar.checked=true; } } } function yanzheng() { if(isDate(document.getElementById("txtStartTime").value)==false) { alert('开始日期时间格式错误!正确格式为:2000-12-12 00:00:00'); return false; } if(isDate(document.getElementById("txtEndTime").value)==false) { alert('结束日期时间格式错误!正确格式为:2000-12-12 00:00:00'); return false; } if(compareDate(document.getElementById("txtStartTime").value,document.getElementById("txtEndTime").value)=="0") { alert('查询开始日期必须小于结束日期!'); return false; } } </script> </head> <body> <form id="form2" runat="server"> <div id="hearder"> <span>公告管理</span></div> <div id="site"> 您的位置:<a href="../index.aspx"> 管理首页 </a>>> 公告管理 </div> <table class="table1" border="1" cellpadding="2" cellspacing="1"> <tr class="tr1"> <td class="td1"> 公告标题: </td> <td class="td2"> <asp:TextBox ID="txtKey" runat="server" CssClass="input1" Width="150px"></asp:TextBox> </td> <td class="td1"> 状态: </td> <td class="td2"> <select id="Status" runat="server" class="select1"> <option selected="selected" value="">所有</option> <option value="1">置顶</option> <option value="0">不置顶</option> </select> </td> <td rowspan="2" class="td3"> <asp:Button ID="btnSearch" runat="server" Text="查询" CssClass="button" OnClientClick="return yanzheng();" OnClick="btnSearch_Click" /> </td> </tr> <tr class="tr1"> <td class="td1"> 时间段: </td> <td class="td2"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td> <asp:TextBox ID="txtStartTime" CssClass="input1" Width="140px" runat="server"></asp:TextBox> </td> <td> <a href="javascript:void(0);" οnclick="javascript:setday(this,txtStartTime,true,false);" style="font-weight: bold; color: Red;">选择</a> </td> <td> --- </td> <td> <asp:TextBox ID="txtEndTime" CssClass="input1" Width="140px" runat="server"></asp:TextBox> </td> <td> <a href="javascript:void(0);" οnclick="javascript:setday(this,txtEndTime,true,false);" style="font-weight: bold; color: Red;">选择</a> </td> <td style="font-weight: bold; color: Fuchsia; font-size: 13px">(默认查询一个月记录)</td> </tr> </table> </td> </tr> </table> <table class="table2"> <tr class="tablehearder4"> <td class="tablehearder1" align="center"> 选择 </td> <td class="tablehearder1" align="center"> 公告标题 </td> <td class="tablehearder1" align="center"> 公告信息 </td> <td align="center" class="tablehearder1" > 是否置顶 </td> <td align="center" class="tablehearder1"> 添加时间 </td> <td align="center" class="tablehearder1"> 修改 </td> <td align="center" class="tablehearder1"> 删除 </td> </tr> <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand"> <ItemTemplate> <tr class="tr2" οnmοuseοver="this.style.backgroundColor='#fffff2';this.style.color='red'" οnmοuseοut="this.style.backgroundColor='#ffffff';this.style.color=''"> <td height="25"> <asp:CheckBox ID="CheckBox1" runat="server" /><asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("NoticeID") %>' /> </td> <td> <span style='color: <%#Eval("TitleColor") %>'> <%#PageValidate.CutString(Eval("NoticeTitle").ToString(),12)%> </span> </td> <td align="center"> <%#PageValidate.CutString(Eval("NoticeContent").ToString(),20)%> </td> <td align="center"> <%#WebUtinity.GetIsTop(Eval("IsTop").ToString())%> </td> <td align="center"> <%#Eval("AddDate")%> </td> <td align="center"> <a href='#'> <img src="../images/icon_xg.gif" alt="点击修改公告" /></a> </td> <td align="center"> <asp:ImageButton ID="imbDelete" runat="server" CommandName="delete" CommandArgument='<%#Eval("NoticeID") %>' ImageUrl="../images/icon_sc.gif" AlternateText="删除" OnClientClick="return confirm('确认删除此公告吗? 删除后不可恢复!');"> </asp:ImageButton> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr class="tr2" οnmοuseοver="this.style.backgroundColor='#fffff4';this.style.color='red'" οnmοuseοut="this.style.backgroundColor='#EEF7FF';this.style.color=''"> <td height="25"> <asp:CheckBox ID="CheckBox1" runat="server" /><asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("NoticeID") %>' /> </td> <td> <span style='color: <%#Eval("TitleColor") %>'> <%#PageValidate.CutString(Eval("NoticeTitle").ToString(),12)%> </span> </td> <td align="center"> <%#PageValidate.CutString(Eval("NoticeContent").ToString(),20)%> </td> <td align="center"> <%#WebUtinity.GetIsTop(Eval("IsTop").ToString())%> </td> <td align="center"> <%#Eval("AddDate")%> </td> <td align="center"> <a href='#'> <img src="../images/icon_xg.gif" alt="点击修改公告" /></a> </td> <td align="center"> <asp:ImageButton ID="imbDelete" runat="server" CommandName="delete" CommandArgument='<%#Eval("NoticeID") %>' ImageUrl="../images/icon_sc.gif" AlternateText="删除" OnClientClick="return confirm('确认删除此公告吗? 删除后不可恢复!');"> </asp:ImageButton> </td> </tr> </AlternatingItemTemplate> </asp:Repeater> <asp:Panel ID="Panel3" runat="server"> <tr class="tablehearder2"> <td align="center" colspan="10"> <asp:LinkButton ID="lbtDeleteAll" runat="server" OnClick="lbtDeleteAll_Click" OnClientClick="return check();" ForeColor="#0066cc" Font-Bold="true">删除选中</asp:LinkButton> <a href="javascript:quanxuan();" style="font-weight: bold; color: #0066cc">全选</a> <a href="javascript:fanxuan();" style="font-weight: bold; color: #0066cc">反选</a> </td> </tr> </asp:Panel> <asp:Panel ID="Panel1" runat="server" Visible="false"> <tr class="tablehearder2"> <td colspan="10" class="tablehearder3"> 没有查询到符合该查询条件的记录!<a href="#" style="color: Blue; font-weight: bold">点击此处</a>添加公告 </td> </tr> </asp:Panel> </table> 分页样式一:<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label> 分页样式二:<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label5" runat="server" Text="Label"></asp:Label> </form> </body> </html>
// 此方法主要实现类似与搜搜网的分页 http://wenwen.soso.com/z/TopQuestion.e?sp=9
private void BindSOSOPager() { // 获取当前请求的虚拟路径 string PageUrl = Request.FilePath; // 获取总的页数 int PageCount = (int)Math.Ceiling((double)(Record) / PageSize); System.Text.StringBuilder sb = new System.Text.StringBuilder(); if (Request.QueryString["page"] == null || Request.QueryString["page"] == "1") { if (PageCount > 1) { if (PageCount < 12) { for (int i = 1; i <= PageCount; i++) { if (i == 1) sb.Append("<span style='color:red; font-weight:bold'> 1</span>"); else sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } else { for (int i = 1; i <= PageCount; i++) { if (i < 11) { if (i == 1) sb.Append("<span style='color:red; font-weight:bold'> 1</span>"); else sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } else if (i == PageCount) sb.Append(string.Format(" ... [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } sb.Append(string.Format(" <a href='{0}?page=2{1}'>下一页</a>", PageUrl, strUrl)); } } else if (Request.QueryString["page"] != null || Request.QueryString["page"] != "") { if (PageCount < 12) { if (CurrentPage == 1) { for (int i = 1; i <= PageCount; i++) { if (i == 1) sb.Append("<span style='color:red; font-weight:bold'> 1</span>"); else sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}]</a>", PageUrl, i.ToString(), strUrl, i.ToString())); } sb.Append(string.Format(" <a href='{0}?page={1}{2}'>下一页</a>", PageUrl, Convert.ToString(CurrentPage + 1), strUrl)); } else if (CurrentPage == PageCount) { sb.Append(string.Format(" <a href='{0}?page={1}{2}'>上一页</a>", PageUrl, Convert.ToString(CurrentPage - 1), strUrl)); for (int i = 1; i <= PageCount; i++) { if (i == PageCount) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } else { sb.Append(string.Format(" <a href='{0}?page={1}{2}'>上一页</a>", PageUrl, Convert.ToString(CurrentPage - 1), strUrl)); for (int i = 1; i <= PageCount; i++) { if (i == CurrentPage) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } sb.Append(string.Format(" <a href='{0}?page={1}{2}'>下一页</a>", PageUrl, Convert.ToString(CurrentPage + 1), strUrl)); } } else { if (CurrentPage != 1) sb.Append(string.Format(" <a href='{0}?page={1}{2}'>上一页</a>", PageUrl, Convert.ToString(CurrentPage - 1), strUrl)); if (PageCount > 11 && CurrentPage > 6 && CurrentPage < PageCount - 5) { for (int i = 1; i <= PageCount; i++) { if (i == 1 && CurrentPage > 6 && PageCount > 11) sb.Append(string.Format(" <a href='{0}?page=1{1}'>[1]</a> ...", PageUrl, strUrl)); else if (i == PageCount && CurrentPage > 6 && PageCount > 11) sb.Append(string.Format(" ... <a href='{0}?page={1}{2}'>[{3}]</a>", PageUrl, i.ToString(), strUrl, i.ToString())); else if (i.ToString() == Request.QueryString["page"].ToString()) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else if (i < CurrentPage + 5 && i > CurrentPage - 5) sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } else if (PageCount > 11 && CurrentPage > 6 && CurrentPage >= PageCount - 5) { for (int i = 1; i <= PageCount; i++) { if (i == 1 && CurrentPage > 6 && PageCount > 11) sb.Append(string.Format(" <a href='{0}?page=1{1}'>[1]</a> ...", PageUrl, strUrl)); else if (CurrentPage == PageCount && i.ToString() == Request.QueryString["page"].ToString()) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else if (i.ToString() == Request.QueryString["page"].ToString()) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else if (CurrentPage > PageCount - 6 && i > PageCount - 10) sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); else if (i < CurrentPage + 5 && i > CurrentPage - 5) sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } else if (PageCount > 11 && CurrentPage <= 6 && CurrentPage < PageCount - 5) { for (int i = 1; i <= PageCount; i++) { if (i == 1 && CurrentPage == 1) sb.Append("<span style='color:red; font-weight:bold'> 1</span>"); else if (i.ToString() == Request.QueryString["page"].ToString()) sb.Append(string.Format(" <span style='color:red; font-weight:bold'>{0}</span>", i.ToString())); else if (i == PageCount) sb.Append(string.Format(" ... <a href='{0}?page={1}{2}'>[{3}]</a>", PageUrl, i.ToString(), strUrl, i.ToString())); else if (CurrentPage < 7 && i < 11) sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); else if (i < CurrentPage + 5 && i >= CurrentPage - 5) sb.Append(string.Format(" [<a href='{0}?page={1}{2}'>{3}</a>]", PageUrl, i.ToString(), strUrl, i.ToString())); } } if (CurrentPage != PageCount) sb.Append(string.Format(" <a href='{0}?page={1}{2}'>下一页</a>", PageUrl, Convert.ToString(CurrentPage + 1), strUrl)); } } Label1.Text = string.Format("总记录数:<span style='color:red'>{0}</span> 总页数:<span style='color:red'>{1}</span> 当前页码:<span style='color:red'>{2}</span>", Record, PageCount, CurrentPage); Label2.Text = sb.ToString(); } protected void btnSearch_Click(object sender, EventArgs e) { Response.Redirect("Notice.aspx?key=" + txtKey.Text + "&istop=" + Status.Value + "&starttime=" + txtStartTime.Text + "&endtime=" + txtEndTime.Text); } protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { try { notice.Delete(Convert.ToInt32(e.CommandArgument.ToString())); ClientScript.RegisterStartupScript(GetType(), "", "alert('删除成功!');", true); BindData(); BindSOSOPager(); BindPager(); } catch { ClientScript.RegisterStartupScript(GetType(), "", "alert('出现错误!');", true); } } protected void lbtDeleteAll_Click(object sender, EventArgs e) { try { for (int i = 0; i < Repeater1.Items.Count; i++) { if (((CheckBox)Repeater1.Items.FindControl("CheckBox1")).Checked == true) notice.Delete(Convert.ToInt32(((HiddenField)Repeater1.Items.FindControl("HiddenField1")).Value)); } ClientScript.RegisterStartupScript(GetType(), "", "alert('删除成功!');", true); BindData(); BindSOSOPager(); BindPager(); } catch { ClientScript.RegisterStartupScript(GetType(), "", "alert('出现错误!');", true); } } }