分页控件源代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
#region Assembly Resource Attribute
[assembly: System.Web.UI.WebResource("WebControlLibrary.Js.AjaxHelper.js", "text/javascript")]
[assembly: System.Web.UI.WebResource("WebControlLibrary.img.bg_pager.png", "image/gif")]
#endregion
namespace WebControlLibrary
{
///
/// Repeater分页控件可进行Ajax分页(但Ajax分页不能传参数)
///
[DefaultProperty("Text")]
[ToolboxData("<{0}:RepeaterPages runat=server>{0}:RepeaterPages>")]
public class RepeaterPages : WebControlLibrary.Repeater
{
//
/// 构造函数
///
public RepeaterPages()
: base()
{
}
///
/// 下一页分页文本内容
///
private string _NextPage = ">";
///
/// 下一页标记
///
[Bindable(false), Description("下一页标记所显示的文本内容")]
public string NextPage
{
get { return _NextPage; }
set { _NextPage = value; }
}
///
/// 下一页标记
///
private string _LastPage = "<";
///
/// 上一页标记
///
[Bindable(false), Description("上一页标记所显示的文本内容")]
public string LastPage
{
get { return _LastPage; }
set { _LastPage = value; }
}
///
/// 总记录数属性
///
private int _RecordCount;
///
/// 页面分页大小属性
///
private int _PageSize;
///
/// 当前页数
///
private int _CurrentPage;
///
/// 返回总页面
///
private int _AllPages;
///
/// 页面地址
///
private string _Url;
///
/// 传入Sql语句
///
private string _SqlString;
///
/// 每页显示页码数
///
private int _PageNumberCount;
///
/// 数据库中显示的字段列表
///
private string _ShowTableCollName;
///
/// 记录数属性
///
[Bindable(true), Category("Appearance"), DefaultValue("0")]
private int RecordCount
{
get
{
int IntTempValue = 0;
if (Int32.TryParse(Sql_Function.SqlDb.RecordCounts(SqlString), out IntTempValue))
return IntTempValue;
else
return 0;
}
set
{
_RecordCount = value;
}
}
///
/// 每页分页大小属性
///
[Bindable(true), Category("Appearance"), DefaultValue("50"), Description("每页分页大小属性")]
public int PageSize
{
get
{
if (_PageSize == 0 || _PageSize.ToString() == "" || _PageSize > 200)
{
return 50;
}
else if (Sql_Function.PublicFunction.isNumber(_PageSize.ToString()))
{
return 50;
}
else if (_PageSize <= 0)
{
return 50;
}
else if (_PageSize > 200)
{
return 50;
}
else
{
return _PageSize;
}
}
set { _PageSize = value; }
}
///
/// 每页显示的页码个数
///
[Bindable(true), Category("Appearance"), DefaultValue("5"), Description("每页显示的页码个数")]
public int PageNumberCount
{
get
{
if (_PageNumberCount == 0 || _PageNumberCount.ToString() == "" || _PageNumberCount > 30)
{
return 5;
}
else if (Sql_Function.PublicFunction.isNumber(_PageNumberCount.ToString()))
{
return 5;
}
else if (_PageNumberCount <= 0)
{
return 5;
}
else if (_PageNumberCount > 30)
{
return 5;
}
else
{
return _PageNumberCount;
}
}
set { _PageNumberCount = value; }
}
///
/// 返回总页数
///
private int AllPages
{
get
{
int totalpage;
if (RecordCount / PageSize == 0)
{
totalpage = RecordCount / PageSize;
}
else
{
totalpage = RecordCount / PageSize + 1;
}
return totalpage;
}
set { _AllPages = value; }
}
///
/// 当前页数
///
private int CurrentPage
{
get
{
string RequestCurrentPage = System.Web.HttpContext.Current.Request["page"];
#region 计算当前页数
int result_currentpage = 1;
if (RequestCurrentPage == null)///指地址栏中没有PAGE字符
{
result_currentpage = 1;
}
if (RequestCurrentPage != null)
{
if (RequestCurrentPage.Length > 10 || RequestCurrentPage.Length < 1)///防止Convert.ToInt32抛出异常或者防止地址栏所得到的page=这样的值
{
result_currentpage = 1;
}
else///是数值
{
if (Sql_Function.PublicFunction.isNumber(RequestCurrentPage))// 判断是否为数值
{
result_currentpage = 1;
}
else
{
if (Convert.ToInt32(RequestCurrentPage) > AllPages)///是否大于总页数
{
result_currentpage = 1;
}
else
{
if (Convert.ToInt32(RequestCurrentPage) <= 1)///是否小于页数1
{
result_currentpage = 1;
}
else
{
result_currentpage = Convert.ToInt32(RequestCurrentPage);
}
}
}
}
}
else
{
result_currentpage = 1;
}
return result_currentpage;
#endregion
}
set { _CurrentPage = value; }
}
///
/// 用于分页所显示URL参数链接(完整的URL参数)
///
[Bindable(false), Description("用于分页所显示URL参数链接(完整的URL参数)")]
public string Url
{
get
{
if (_Url == null || _Url.ToString() == "")
{
return "?";
}
else
{
if (_Url.IndexOf("?") == -1)
{
string a = "?";
a = a + _Url;
return a;
}
else if (Convert.ToInt32(StringFindCount(_Url, "?")) > 1)//如果含有多个?号
{
return "?";
}
else
{
return _Url;
}
}
}
set { _Url = value; }
}
///
/// 传入Sql语句
///
[Bindable(false), Description("传入统计记录总数的Sql语句 例如:select count(id) from tablename")]
public string SqlString
{
get
{
if (_SqlString == null || _SqlString.ToString() == "" || _SqlString.Length < 15)
{
return "";
}
else
{
return _SqlString;
}
}
set { _SqlString = value; }
}
///
/// 数据库中显示的字段列表
///
[Bindable(false), Description("数据库中显示的字段列表 多个字段中间用逗号隔开")]
public string ShowTableCollName
{
get
{
if (_ShowTableCollName == null || _ShowTableCollName == "")
{
return "*";
}
else
{
return _ShowTableCollName;
}
}
set { _ShowTableCollName = value; }
}
///
/// 分页信息前和尾所包含的HTML代码
///
private string _PageBeforeHtml;
///
/// 分页信息前和尾所包含的HTML代码
///
private string _PageLastHtml;
///
/// 分页信息前和尾所包含的HTML代码
///
[Bindable(false), Description("分页信息前和尾所包含的HTML代码 ")]
public string PageBeforeHtml
{
get { return _PageBeforeHtml; }
set { _PageBeforeHtml = value; }
}
///
/// 分页信息前和尾所包含的HTML代码
///
[Bindable(false), Description("分页信息前和尾所包含的HTML代码 ")]
public string PageLastHtml
{
get { return _PageLastHtml; }
set { _PageLastHtml = value; }
}
///
/// 调用的样式
///
private string _Css = "";
///
/// 调用的样式
///
[Bindable(false), Category("Behavior"), DefaultValue("默认样式"), TypeConverter(typeof(WebPageCssSelect)), Description("分页样式")]
public string Css
{
get { return _Css; }
set { _Css = value; }
}
///
/// 是否为分页加上快捷输入框输入数值回车导航分页
///
private bool _SelectPage = true;
///
/// 是否为分页加上快捷输入框输入数值回车导航分页
///
[Bindable(false), Description("是否为分页加上快捷输入框输入数值回车导航分页")]
public bool SelectPage
{
get { return _SelectPage; }
set { _SelectPage = value; }
}
///
/// 分页显示对齐方式
///
private string _AlignSorts = "right";
///
/// 分页显示对齐方式
///
[Bindable(false), DefaultValue("right"), TypeConverter(typeof(WebPageAlign)), Description("分页显示对齐方式")]
public string AlignSorts
{
get { return _AlignSorts; }
set { _AlignSorts = value; }
}
///
/// 分页Js分页函数调用名称
///
private string _JsFunctionName = "_doPostBack";
///
/// 分页Js分页函数调用名称
///
[Bindable(false), Description("分页Js分页函数调用名称")]
public string JsFunctionName
{
get
{
if (_JsFunctionName == null || _JsFunctionName.Replace("'", "").Replace("/"", "") == "")
{
return "_doPostBack";
}
else
{
return _JsFunctionName;
}
}
set { _JsFunctionName = value; }
}
///
/// 是否启用简洁分页样式
///
private bool _AutoPageConcise = false;
///
/// 是否启用简洁分页样式
///
[Bindable(false), Description("是否启用简洁分页样式")]
public bool AutoPageConcise
{
set { _AutoPageConcise = value; }
get { return _AutoPageConcise; }
}
///
/// 是否允许无刷新调用分页
///
private bool _BoolIsAutoAjaxPage = false;
///
/// 是否允许无刷新调用分页
///
[Bindable(false), Description("是否允许无刷新调用分页")]
public bool BoolIsAutoAjaxPage
{
get { return _BoolIsAutoAjaxPage; }
set { _BoolIsAutoAjaxPage = value; }
}
///
/// 无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径
///
private string _AutoAjaxPageUrl = "";
///
/// 无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径
///
[Bindable(false), Description("无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径")]
public string AutoAjaxPageUrl
{
get { return _AutoAjaxPageUrl; }
set { _AutoAjaxPageUrl = value; }
}
///
/// 用于无刷新中间级异步调用分页信息页面的中间层页面地址
///
private string _AutoAjaxReturnPageUrl = "";
///
/// 用于无刷新中间级异步调用分页信息页面的中间层页面地址
///
[Bindable(false), Description("用于无刷新中间级异步调用分页信息页面的中间层页面地址")]
public string AutoAjaxReturnPageUrl
{
get { return _AutoAjaxReturnPageUrl; }
set { _AutoAjaxReturnPageUrl = value; }
}
///
/// 无刷新调用的页面所返回的控件ID
///
private string _AutoAjaxPageWebControl = "";
///
/// 无刷新调用的页面所返回的控件ID
///
[Bindable(false), Description("无刷新调用的页面所返回的控件ID")]
public string AutoAjaxPageWebControl
{
get { return _AutoAjaxPageWebControl; }
set { _AutoAjaxPageWebControl = value; }
}
///
/// 输出html,在浏览器中显示控件
///
/// 要写出到的 HTML 编写器
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.Page.GetType(), "AjaxPageJs"))
{
output.Write("/n");
output.Write("/n");
this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "AjaxPageJs", "");
}
#region 输出分页链接样式
string CssInfo = WebPageCss.CssStyle(Css, AlignSorts, this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebControlLibrary.img.bg_pager.png"));
output.WriteLine(CssInfo);
#endregion
#region 输出分页Js
output.WriteLine("/n");
#endregion
if (!DesignMode)
{
string Result = Pagination();
if (RecordCount > PageSize)
{
output.WriteLine(Result);
}
}
}
///
/// 调用存储过程返回数据集
///
/// 是否启用存储过程调用数据 true:启用
/// 存储过程名
/// 表名
/// 表中该列来进行分页(必须是唯一性的字符,比如标识种子
/// 完整的排序字段值 不需要order by
/// 存储过程分页中的条件 不需要Where
///
public System.Data.DataTable getObjectRecordCount(bool IsProc, string PorcedureName, string TableName, string TableCollName, string OrderBy, string Where)
{
System.Data.DataTable DataTables = new System.Data.DataTable();
if (IsProc)
{
DataTables = Sql_Function.SqlDb.ReturnDataTable("" + PorcedureName + " '" + TableName + "','" + TableCollName + "'," + CurrentPage + "," + PageSize + ",'" + ShowTableCollName.Replace("'", "") + "','" + OrderBy + "','" + Where + "'");
}
else//普通分页
{
string StrSql = string.Format("select {0} from {1} where {2} is not null", ShowTableCollName, TableName, TableCollName);
if (Where != null && Where.Trim().Replace("'", "") != "")
{
StrSql += " and " + Where.Trim().Replace("'", "");
}
if (OrderBy != null && OrderBy.Trim().Replace("'", "") != "")
{
StrSql += " order by " + OrderBy.Trim().Replace("'", "");
}
try
{
DataTables = Sql_Function.SqlDb.ReturnDataTablePage(StrSql, CurrentPage, PageSize, "ReturnDataTable");
}
catch
{
DataTables = null;
}
}
return DataTables;
}
///
/// 分页函数
///
/// 总记录数
/// Url地址
/// 当前页数
public string Pagination()
{
int allpage = 0;//总页数
int next = 0;//下页标记
int pre = 0;//上一页标记
int startcount = 0;//开始页码数
int endcount = 0;//结束页码数
string pagestr = "";//返回分页结果集
if (CurrentPage < 1) { CurrentPage = 1; }
//计算总页数
if (PageSize != 0)
{
allpage = (RecordCount / PageSize);
allpage = ((RecordCount % PageSize) != 0 ? allpage + 1 : allpage);
allpage = (allpage == 0 ? 1 : allpage);
}
next = CurrentPage + 1;
pre = CurrentPage - 1;
if (PageNumberCount % 2 == 0)
{
startcount = (CurrentPage + PageNumberCount / 2) > allpage ? allpage - (PageNumberCount - 1) : CurrentPage - (PageNumberCount / 2 - 1);
endcount = CurrentPage < PageNumberCount / 2 ? PageNumberCount : CurrentPage + PageNumberCount / 2;
}
else
{
startcount = (CurrentPage + PageNumberCount / 2) > allpage ? allpage - (PageNumberCount - 1) : CurrentPage - (PageNumberCount / 2 - 1);
endcount = CurrentPage < PageNumberCount / 2 ? PageNumberCount : CurrentPage + PageNumberCount / 2 + 1;
}
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allpage < endcount) { endcount = allpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "/n" + PageBeforeHtml + "/n";
pagestr += "
if (!AutoPageConcise)
{
pagestr += " 页次:" + CurrentPage + "/" + allpage + " /n";
pagestr += "每页" + PageSize.ToString() + "/n";
pagestr += " 记录数" + RecordCount + " /n ";
}
#region 上一页标记
//pagestr += CurrentPage > 1 ? "1.. " + LastPage + "" : "" + LastPage + "";
pagestr += CurrentPage > 1 ? "1.. " + LastPage + "" : "" + LastPage + "";
#endregion
#region 中间页处理,这个增加时间复杂度,减小空间复杂度
中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
//pagestr += CurrentPage == i ? " " + i + "" : " " + i + "";
pagestr += CurrentPage == i ? " /n" + i + "" : " /n" + i + "";
}
#endregion
#region 下一页标记
//pagestr += CurrentPage != allpage ? " " + NextPage + " .." + allpage + "" : "" + NextPage + "";
pagestr += CurrentPage != allpage ? " " + NextPage + " .." + allpage + "" : "" + NextPage + "";
#endregion
if (SelectPage)
{
pagestr += " /n";
pagestr += "/n/n";
}
pagestr += "/n
return pagestr;
}
///
/// 跳转
///
/// 总页数
/// 当前页数
/// 传入链接地址
///
private string SelectPages(int PageCount, int CurrentPage, string Url)
{
string ResultPage = "";
for (int k = 1; k <= PageCount; k++)
{
if (k == CurrentPage)
{
ResultPage += "";
}
else
{
ResultPage += "";
}
}
return ResultPage;
}
///
/// 判断某一字符出现的次数
///
/// 目标字符串
/// 要查找的字符 只能为字符,不能为字符串,如果为字符串,则自动洁取第一个字符为默认的字符
///
private string StringFindCount(string str, string split)
{
int c1 = 0;
string a = split;
if (split == null || split.ToString() == "" || split.ToString().Trim().Length < 1)
{
a = " ";
}
else if (split.ToString().Trim().Length > 1)
{
a = a.Substring(0, 1);
}
else
{
}
if (str == null || str.ToString().Trim().Replace("'", "") == "" || str.ToString().Trim().Replace("'", "").Length < 1)
{
c1 = 0;
}
else
{
for (int i = 0; i < str.Length; i++)
{
if (str[i] == char.Parse(a))
{
c1++;
}
}
}
return c1.ToString();
}
}
///
/// 分页样式选择器
///
public class WebPageCssSelect : StringConverter
{
///
/// 构造函数
///
public WebPageCssSelect() { }
///
/// 分页样式选择器编辑属性
///
///
///
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
///
/// 获取标准值列表
///
///
///
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList CssArray = new ArrayList();
CssArray.Add("Digg Style");
CssArray.Add("Yahoo Style");
CssArray.Add("New Yahoo! Style");
CssArray.Add("Meneame Style");
CssArray.Add("Flickr Style");
CssArray.Add("Sabros.us Style");
CssArray.Add("Green Style");
CssArray.Add("Gray Style");
CssArray.Add("Black Style");
CssArray.Add("Mis Algoritmos Style");
CssArray.Add("Black-Red Style");
CssArray.Add("Gray Style 2");
CssArray.Add("Yellow Style");
CssArray.Add("jogger Style");
CssArray.Add("512megas Style");
CssArray.Add("Technorati Style");
CssArray.Add("YouTube Style");
CssArray.Add("MSDN Search Style");
CssArray.Add("Msn Gray Style");
CssArray.Add("Badoo");
CssArray.Add("Blue Style");
CssArray.Add("Green-Black Style");
CssArray.Add("viciao Style");
CssArray.Add("默认样式");
return new StandardValuesCollection(CssArray);
}
///
/// return ture的话只能选,return flase可选可填
///
///
///
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
///
/// 样式对齐方式
///
public class WebPageAlign : StringConverter
{
///
/// 构造函数
///
public WebPageAlign() { }
///
/// 分页样式选择器编辑属性
///
///
///
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
///
/// 获取标准值列表
///
///
///
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList CssArray = new ArrayList();
CssArray.Add("right");
CssArray.Add("left");
CssArray.Add("center");
return new StandardValuesCollection(CssArray);
}
///
/// return ture的话只能选,return flase可选可填
///
///
///
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
///
/// 返回样式内容
///
public class WebPageCss
{
///
/// 返回样式中内容
///
/// 样式种类
/// 样式对齐方式
/// 背景图片
///
public static string CssStyle(string Css, string AlignSorts,string BackGroundImageUrl)
{
string Result = "";
#region 输出分页链接样式
Result+="/n";
#endregion
return Result;
}
}
}
基类Repeater.cs代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControlLibrary
{
///
/// Repeater 控件。
///
[DefaultProperty("Text"), ToolboxData("<{0}:Repeater runat=server>{0}:Repeater>")]
public class Repeater : System.Web.UI.WebControls.Repeater
{
///
/// 构造函数
///
public Repeater()
: base()
{
}
}
}
所使用的存储过程如下:
------------------------------------
--用途:大容量数据存储过程分页
--时间:2009-07-18 22:12
--作者:轻舞飞扬
--qq号:42383239
------------------------------------
CREATE PROC PageView
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小(记录数)
@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序
@Where nvarchar(1000)='' --查询条件
--@PageCount int=null OUTPUT --总页数
AS
SET NOCOUNT ON
declare @PageCount int
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END
--分页字段检查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END
--其他参数检查及规范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF len(@PageCurrent)>5 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'
--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF @PageCount IS NULL
BEGIN
DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @PageCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
--EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END
--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=(@PageCurrent-1)*@PageSize
--第一页直接显示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
--处理别名
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'
--生成主键(惟一键)处理条件
DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
@s nvarchar(1000),@Field sysname
SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
WHILE CHARINDEX(N',',@s)>0
if len(@s)>2-----解决当主键字段长度小于2时出现的情况
begin
SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
@Where=REPLACE(@Where,@Field,N'a.'+@Field),
@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
end
else
begin
SELECT @Field=@s,
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
@Where=REPLACE(@Where,@Field,N'a.'+@Field),
@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
end
SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
@Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
@Where2=CASE
WHEN @Where='' THEN N'WHERE ('
ELSE @Where+N' AND ('
END+N'b.'+@s+N' IS NULL'+@Where2+N')'
--执行查询
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' a LEFT JOIN(SELECT TOP '+@TopN1
+N' '+@FieldKey
+N' FROM '+@tbname
+N' a '+@Where
+N' '+@FieldOrder
+N')b ON '+@Where1
+N' '+@Where2
+N' '+@FieldOrder)
END
GO
调用的数据库底层代码:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Text;
using System.Data.Common;
using System.Text.RegularExpressions;
using System.Reflection;
using System.IO;
namespace Sql_Function
{
///
/// 数据处理底层 数据基本操作
///
public class SqlDb
{
#region 数据库公用连接字符串
public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
#endregion
#region 数据库操作方法 连接和关闭对象
///
/// 打开数据库连接
///
///
public static SqlConnection OpenDataBase()
{
SqlConnection conn = new SqlConnection(ConnectionString);
try
{
conn.Open();
return conn;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 关闭数据库连接
///
///
public static void CloseDataBase(SqlConnection conn)
{
try
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
catch (Exception ex)
{
conn.Close();
conn.Dispose();
throw new Exception(ex.Message);
//throw new ArgumentNullException("connection");
}
finally
{
conn.Close();
}
}
#endregion
#region 数据库返回DataTable
///
/// 返回指定Sql语句的返回DataTable
///
/// 传入的Sql语句
///
public static DataTable ReturnDataTable(string strSQL)
{
SqlConnection conn = OpenDataBase();
DataTable table = new DataTable();
SqlDataAdapter da = null;
try
{
da = new SqlDataAdapter(strSQL, conn);
da.Fill(table);
da.Dispose();
CloseDataBase(conn);
return table;
}
catch (Exception e)
{
da.Dispose();
table.Dispose();
CloseDataBase(conn);
throw new Exception(e.Message);
}
finally
{
da.Dispose();
CloseDataBase(conn);
}
}
///
/// 返回DataTable记录集,并且实现分页功能
///
/// 传入SQL语句
/// 当前页
/// 每页分页大小
/// 填充数据库表名称
///
public static DataTable ReturnDataTablePage(string sqls, int currentpage, int pagesize, string table)
{
SqlConnection conn = OpenDataBase();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqls, conn);
try
{
int startcount;
if (currentpage < 1)
{
startcount = currentpage * pagesize;
}
else
{
startcount = (currentpage - 1) * pagesize;
}
da.Fill(ds, startcount, pagesize, table);
da.Dispose();
CloseDataBase(conn);
return ds.Tables[0];
}
catch (Exception ex)
{
da.Dispose();
CloseDataBase(conn);
ds.Dispose();
throw new Exception(ex.Message);
}
finally
{
da.Dispose();
CloseDataBase(conn);
}
}
#endregion
#region 数据库公用方法集
///
/// 返回记录总数 传入带有count(主键)统计的Sql语句
///
/// 传入带有count(主键)统计的Sql语句
///
public static string RecordCounts(string StrSql)
{
string ProcInfo = "0";
SqlConnection conn = OpenDataBase();
SqlCommand comm = new SqlCommand(StrSql, conn);
comm.CommandTimeout = 120;
SqlDataReader DataReaders = comm.ExecuteReader(); //返回值
if (DataReaders.Read())
{
ProcInfo = DataReaders[0].ToString();
}
DataReaders.Close();
comm.Dispose();
CloseDataBase(conn);
return ProcInfo;
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Sql_Function
{
public class PublicFunction
{
///
/// 判断是否为数字 TRUE代表不是数字,False代表是数字
///
/// 字符串
///
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 false;
}
else
{
return true;
}
}
}
}
前台页面样例:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="FrameWork.Web.Index" %>
namespace FrameWork.Web
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
protected void Bind()
{
string Sql = "select count(Sys_NewsList_ID) from Sys_NewsList";//查询Sql语句
#region 列表选项
#region 分页控件基本属性
RepeaterPages1.SqlString = Sql;//用于统计总记录数和进行数据分页的Sql语句
RepeaterPages1.LastPage = "< Prev";
RepeaterPages1.NextPage = "Next > ";
RepeaterPages1.PageBeforeHtml = "";
RepeaterPages1.PageLastHtml = "";
#region 构造Url参数
System.Text.StringBuilder StrBulider = new System.Text.StringBuilder();
StrBulider.Append("&a=");
#endregion
RepeaterPages1.Url = StrBulider.ToString();
#endregion
#region 数据绑定
RepeaterPages1.DataSource = RepeaterPages1.getObjectRecordCount(true, "PageView", "Sys_NewsList", "Sys_NewsList_ID", " Sys_NewsList_ID desc", " Sys_NewsList_ID is not null");
RepeaterPages1.DataBind();
#endregion
#endregion
}
}
}