以下是一个web自定义的示例,几年前写的,写得也不是很好,权当抛砖引玉。
主要实现datagrid的分页功能:
调用使用方法:
this.DataGrid1.ConnectionString = DataClass.ConnectionString; //这里指定一个连接字串。
this.DataGrid1.strSQL = strSQL;
this.DataGrid1.DataBind();
如果当前的sql中有identitykey,则必须指定
this.DataGrid1.IdentityKey = "字段";
然后绑定。
如果是acesss数据库
this.DataGrid1.bIsAccess = true;
还有几个其他的可选参数,看看代码就明白了。
using
System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Data.OleDb;
namespace ZFControls
... {
/**//// <summary>
/// DataGrid
/// 实现功能
/// </summary>
[
ToolboxData("<{0}:DataGrid runat=server></{0}:DataGrid>"),
ToolboxBitmap(typeof(ZFControls.DataGrid), "Grid.bmp")
]
public class DataGrid : System.Web.UI.WebControls.DataGrid,IPostBackEventHandler
...{
public DataGrid()
...{
if(this.Context == null)
...{
this.ShowFooter = true;//显示设计视图
}
}
private int CurrentPageNo
...{
get
...{
if(ViewState["PageNo"]==null)
...{
ViewState["PageNo"] = 1 ;
}
return (int)ViewState["PageNo"];
}
set
...{
ViewState["PageNo"] =value;
}
}
/**//// <summary>
/// 是否在列表中显示记录数,默认为True
/// </summary>
private bool ShowRecordCount
...{
get
...{
if(ViewState["ShowRecordCount"]==null)
...{
ViewState["ShowRecordCount"] = true ;
}
return (bool)ViewState["ShowRecordCount"];
}
set
...{
ViewState["ShowRecordCount"] =value;
}
}
/**//// <summary>
/// 是否使用默认的样式 默认为true
/// </summary>
public bool bDefaultStyle
...{
get
...{
if(ViewState["DefaultStyle"]==null)
...{
ViewState["DefaultStyle"] = true ;
}
return (bool)ViewState["DefaultStyle"];
}
set
...{
ViewState["DefaultStyle"] =value;
}
}
public string SortExpression
...{
get
...{
if(ViewState["SortExpression"]==null)
...{
ViewState["SortExpression"] = "" ;
}
return (string)ViewState["SortExpression"];
}
set
...{
ViewState["SortExpression"] =value;
}
}
public bool bIsAccess
...{
get
...{
if(ViewState["IsAccess"]==null)
...{
ViewState["IsAccess"] = false ;
}
return (bool)ViewState["IsAccess"];
}
set
...{
ViewState["IsAccess"] =value;
}
}
private int RecordCount
...{
get
...{
if(ViewState["RecordCount"]==null)
...{
ViewState["RecordCount"] = 0;
}
return (int)ViewState["RecordCount"];
}
set
...{
ViewState["RecordCount"] =value;
}
}
public string IdentityKey
...{
get
...{
if(ViewState["IdentityKey"]==null)
...{
ViewState["IdentityKey"] = "";
}
return (string)ViewState["IdentityKey"];
}
set
...{
ViewState["IdentityKey"] =value;
}
}
private int PageCount1
...{
get
...{
if(this.Context == null) return 0;
if(this.RecordCount % this.PageSize ==0)
return this.RecordCount /this.PageSize;
else
return Convert.ToInt32(this.RecordCount /this.PageSize) +1;
}
}
private System.Web.UI.WebControls.DataGridItem objFooterItem; //footer Item
public string strSQL
...{
get
...{
if(ViewState["strSQL"]==null)
...{
ViewState["strSQL"] = "" ;
}
return (string)ViewState["strSQL"];
}
set
...{
if((string)value != this.strSQL)
...{
this.CurrentPageNo = 1;//更改了strSQL,重置参数
this.RecordCount = 0;
}
ViewState["strSQL"] =value;
}
}
public string ConnectionString
...{
get
...{
if(ViewState["ConnectionString"]==null)
...{
ViewState["ConnectionString"] = "";
}
return (string)ViewState["ConnectionString"];
}
set
...{
ViewState["ConnectionString"] =value;
}
}
public string ImagePath
...{
get
...{
if(ViewState["ImagePath"]==null)
...{
ViewState["ImagePath"] = "../images/" ;
}
return (string)ViewState["ImagePath"];
}
set
...{
ViewState["ImagePath"] =value;
}
}
private string OldSortExpression
...{
get
...{
if(ViewState["OldSortExpression"]==null)
...{
ViewState["OldSortExpression"] = "";
}
return (string)ViewState["OldSortExpression"];
}
set
...{
ViewState["OldSortExpression"] =value;
}
}
public bool ShowNoRecordMsg
...{
get
...{
if(ViewState["ShowNoRecordMsg"]==null)
...{
ViewState["ShowNoRecordMsg"] = true;
}
return (bool)ViewState["ShowNoRecordMsg"];
}
set
...{
ViewState["ShowNoRecordMsg"] =value;
}
}
private string GetStyleString()
...{
string res ="";
foreach(string sKey in this.Style.Keys)
...{
res += sKey +":"+ this.Style[sKey] +";";
}
return res;
}
protected override void OnSortCommand(DataGridSortCommandEventArgs e)
...{
string sSort = e.SortExpression.Trim();
if(this.SortExpression.Trim().Split(' ')[0] == e.SortExpression)
...{
sSort = this.SortExpression;
}
string direct ="ASC";
if (sSort.IndexOf(" ")>-1)
...{
direct = sSort.Split(' ')[1];
if(direct.ToUpper() =="ASC")
...{
direct ="DESC";
}
else
...{
direct ="ASC";
}
}
sSort = sSort.Split(' ')[0] +" "+ direct;
if(this.OldSortExpression!="")
...{
DataGridColumn oOldCol = this.GetColumnBySortExpression(this.OldSortExpression);
oOldCol.HeaderText = oOldCol.HeaderText.Split(' ')[0];
}
DataGridColumn col = GetColumnBySortExpression(e.SortExpression);
if(direct =="ASC")
...{
col.HeaderText = col.HeaderText.Split(' ')[0] +" <font class='gridarrow' face='webdings'>5</font>";
}
else
...{
col.HeaderText = col.HeaderText.Split(' ')[0] +" <font class='gridarrow' face='webdings'>6</font>";
}
this.OldSortExpression = e.SortExpression;
this.SortExpression = sSort;
this.DataBind();
}
private DataGridColumn GetColumnBySortExpression(string sort)
...{
for (int i=0;i<this.Columns.Count;i++)
...{
if(this.Columns[i].SortExpression ==sort.Split(' ')[0])
...{
return this.Columns[i];
}
}
return null;
}
protected override void OnItemCreated(DataGridItemEventArgs e)
...{
if(e.Item.ItemType == ListItemType.Footer)
...{
this.objFooterItem = e.Item;//将它保存下来,目前还不能取得它的Visible 属性,最后再处理
}
else if(e.Item.ItemType == ListItemType.Item
|| e.Item.ItemType == ListItemType.AlternatingItem)
...{
e.Item.Attributes.Add("onmouseover","javascript:return DataGridOnMouseOver();");
e.Item.Attributes.Add("onmouseout","javascript:return DataGridOnMouseOut();");
}
base.OnItemCreated (e);
}
private string GetPagerText ()
...{
string res = @"<!--{3}-->
<table align='right'>
<TR>
<TD>
<span {0} {9} title='回到首页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='1';btnPager_{2}.click();"" style='CURSOR: hand; ;border: solid 1px #ffffff;padding-right:2px;'><font face='webdings'>7</font>[首页]</span>
</TD>
<TD>
<span {0} {9} title='回到上一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='2';btnPager_{2}.click();"" style='CURSOR: hand; border: solid 1px #ffffff;padding-right:2px;'> <font face='webdings'>3</font>上页</span>
</TD>
<TD>
<span {1} {9} title='回到下一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='3';btnPager_{2}.click();"" style='CURSOR: hand;border: solid 1px #ffffff;padding-right:2px;'> 下页<font face='webdings'>4</font></span>
</TD>
<TD>
<span {1} {9} title='回到最后一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='4';btnPager_{2}.click();"" style='CURSOR: hand; border: solid 1px #ffffff;padding-right:2px;'>[末页]<font face='webdings'>8</font></span>
</TD>
<TD>
<span id='lblCurrentIndex' style='CURSOR: hand' >[{4}/{8}页]</span>
</TD><TD>
<span id='tbl1' style='CURSOR: hand;height:20px;border: solid 0px #e0e0e0;padding:2px;'></TD><TD>{10}</TD><TD>跳到</TD><TD></span><input name='txtGoPage_{2}' value='{7}' type='text' id='txtGoPage' class='textbox1' style='width:20px;height:18px' />
</TD><TD> <INPUT class='btnPager' οnclick=""hidAction_{2}.value='5';btnPager_{2}.click();"" type=button value=' GO '> </TD><TD>
<span id='tbl2' style='CURSOR: hand;height:20px;border: solid 0px #e0e0e0;padding:2px;'>每页显示</span></TD><TD><input name='txtRowsPager_{2}' type='text' id='txtRowsPager' value='{5}' class='textbox1' style='width:20px;height:18px' /></TD><TD> <INPUT class='btnPager' οnclick=""hidAction_{2}.value='6';btnPager_{2}.click();"" type=button value=重置>
</TD><TD><input name='hidAction_{2}' id='hidAction_{2}' type='hidden' />";
if(this.Context != null)//非设计视图
...{
res += @"
<input type='button' name='btnPager_{2}' id='btnPager_{2}' {6} value='Button' id='btnPager_{2}' style='DISPLAY: none' /> ";
}
res +=@"</TD><TD>
</TR></TABLE>";
//System.Web.HttpContext.Current.Response.Write(System.Web.HttpContext.Current.Server.HtmlEncode(res));
//System.Web.HttpContext.Current.Response.Flush();
string sP0 = this.CurrentPageNo > 1 ?"":"disabled";
string sP1 = this.CurrentPageNo < this.PageCount1 ?"":"disabled";
string sP2 = this.ID;
string sP3 = this.ImagePath ;
string sP4 = "<font color='red'>"+this.CurrentPageNo.ToString()+"</font>";
string sP5 = this.PageSize.ToString();
string sP6 = "οnclick="javascript:"+this.Page.GetPostBackEventReference(this,"btnPager_"+sP2)+""";
string sP7 = this.CurrentPageNo.ToString();
//System.Web.HttpContext.Current.Response.Write(this.PageCount1+"**");
string sP8 = "<font color='red'>"+this.PageCount1.ToString()+"</font>";
string sP9 = "οnmοuseοver='javascript:{0}_PagerOnMouseOver(this);' οnmοuseοut='javascript:{0}_PagerOnMouseOut(this);' οnmοusedοwn='javascript:{0}_PagerOnMouseDown(this);' οnmοuseup='javascript:{0}_PagerOnMouseUp(this);'";
string sP10 = "";
if(this.ShowRecordCount) //显示记录数
...{
sP10 = "[<font color='red'>"
+ (((this.CurrentPageNo-1)* this.PageSize)+1).ToString()+"</font>-<font color='red'>"
+( this.CurrentPageNo*this.PageSize <this.RecordCount?this.CurrentPageNo*this.PageSize:this.RecordCount ).ToString()+"</font>/<font color='red'>"+this.RecordCount.ToString()+"</font>条] ";
}
sP9 = String.Format(sP9,sP2);
res = String.Format(res,sP0,sP1,sP2,sP3,sP4,sP5,sP6,sP7,sP8,sP9,sP10);
string res1 = @"
<SCRIPT LANGUAGE='javascript'>
<!--
function {0}_PagerOnMouseOver(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText ='border-right:solid 1px gray;border-bottom:solid 1px gray ';
}
function {0}_PagerOnMouseOut(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText = '';
}
function {0}_PagerOnMouseDown(obj)
{
if(obj.disabled) return;
obj.runtimeStyle.cssText ='border-bottom:solid 1px white;border-right:solid 1px white;border-top:solid 1px gray;border-left:solid 1px gray;';
}
function {0}_PagerOnMouseUp(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText = 'border-top:solid 1px white;border-left:solid 1px white;border-bottom:solid 1px gray;border-right:solid 1px gray;';
}
//-->
</SCRIPT>
<!--********************************************--->
";
//res1 = String.Format(res1,sP2);
res1 = res1.Replace("{0}",sP2);
return res+res1;
}
protected override void OnPreRender(EventArgs e)
...{
//base.OnPreRender(e);
//return;
if(bDefaultStyle)//默认的样式
...{
this.BorderColor = (Color)new System.Drawing.ColorConverter().ConvertFromString("#E3EDF5");
this.Attributes["Class"] = "GridTable";
}//处理FoooterItem
//找到第一个Visible = True的列
if(this.objFooterItem != null)
...{
int i = 0;
for (i = 0;i< this.Columns.Count;i++)
...{
if(this.Columns[i].Visible )
...{
break;
}
}
while(this.objFooterItem.Cells.Count>i+1)
...{
objFooterItem.Cells.RemoveAt(0);
}
objFooterItem.Cells[i].ColumnSpan = this.Columns.Count-i;
if(this.bDefaultStyle)
...{
objFooterItem.Cells[i].Attributes["class"] = "t1";
}
if(this.Items.Count ==0 && this.ShowNoRecordMsg) //没有记录
...{
this.objFooterItem.Cells[i].Text =@"<table width='100%' cellspacing='0' cellpadding='0'><TR><TD height='20px' style='color:gray' align='center'>信息:没有查询到任何记录!</td></tr>
</table>";
}
else
...{
this.objFooterItem.Cells[i].HorizontalAlign = HorizontalAlign.Right;
this.objFooterItem.Cells[i].Text = this.GetPagerText();
this.objFooterItem.Cells[i].Height = 22;
//e.Item.Cells[0].Style.Add("border-top","solid 2px #336699");
}
}
if(this.HeaderStyle.CssClass == "")
...{
this.HeaderStyle.CssClass = "gridheader";
}
if(this.ItemStyle.CssClass =="")
...{
this.ItemStyle.CssClass ="t1";
}
if(this.AlternatingItemStyle.CssClass =="")
...{
this.AlternatingItemStyle.CssClass ="t2";
}
this.ShowFooter = true;
base.OnPreRender (e);
}
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
/**//// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
...{
if(this.Context == null) //设计
...{
output.Write("<div style='width:100%;border:solid 1px #336699'>");
output.Write("<font color='orange'>请注意:<BR>1、必须指定的参数:ConnectString,strSQL<BR> 2、如果查询中只有一张表且有IdentityKey必须指定该Key</font>");
}
base.Render(output);
if(this.Context == null)
...{
output.Write(this.GetPagerText());
output.Write("<DIV>");
}
}
/**//// <summary>
/// 利用存储过程进行分页
/// </summary>
/// <param name="strSQl">sql</param>
/// <param name="PrimaryKey">关键字段,一般为表的主健</param>
/// <param name="PageNo">当前页从1开始</param>
/// <param name="PageSize">页面大小</param>
/// <param name="SortExpression">排序表达式</param>
/// <param name="RecordCount">记录总数</param>
/// <returns></returns>
public DataSet GetSqlResult(string strSQL,string PrimaryKey,int PageNo,int PageSize,string SortExpression,ref int RecordCount)
...{
SqlConnection conn =null;
SqlCommand cmd =null;
SqlDataAdapter dapt =null;
try
...{
conn= new SqlConnection(this.ConnectionString);
cmd = new SqlCommand("GetPageResult",conn);
cmd.CommandTimeout = 60000;
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pSql = cmd.Parameters.Add("@sql",SqlDbType.NVarChar,4000);
pSql.Value = strSQL;
SqlParameter pPKey = cmd.Parameters.Add("@PKey",SqlDbType.VarChar,50);
pPKey.Value = PrimaryKey;
SqlParameter pPageNo = cmd.Parameters.Add("@PageNo",SqlDbType.Int,4);
pPageNo.Value = PageNo;
SqlParameter pPageSize = cmd.Parameters.Add("@PageSize",SqlDbType.Int,4);
pPageSize.Value = PageSize;
SqlParameter pSort = cmd.Parameters.Add("@sort",SqlDbType.VarChar,50);
pSort.Value = SortExpression;
SqlParameter pRecordCount = cmd.Parameters.Add("@RecordCount",SqlDbType.Int,4);
//pRecordCount.Value = SortExpression;
pRecordCount.Direction = ParameterDirection.Output;
dapt = new SqlDataAdapter(cmd);
conn.Open();
DataSet ds = new DataSet();
dapt.Fill(ds,"Table1");
RecordCount =(int)pRecordCount.Value;
return ds;
}
catch (Exception e)
...{
throw(e);
//return null;
}
finally
...{
if(conn!=null)
conn.Dispose();
if(cmd!=null)
cmd.Dispose();
if(dapt!=null)
dapt.Dispose();
}
}
/**//// <summary>
/// 利用存储过程进行分页
/// </summary>
/// <param name="strSQl">sql</param>
/// <param name="PrimaryKey">关键字段,一般为表的主健</param>
/// <param name="PageNo">当前页从1开始</param>
/// <param name="PageSize">页面大小</param>
/// <param name="SortExpression">排序表达式</param>
/// <param name="RecordCount">记录总数</param>
/// <returns></returns>
public DataSet GetAccessResult(string strSQL,string PrimaryKey,int PageNo,int PageSize,string SortExpression,ref int RecordCount)
...{
DataSet ds = new DataSet();
if(System.Web.HttpContext.Current.Session[this.Page.ToString()]==null||(!this.Page.IsPostBack))
...{
OleDbConnection conn =null;
OleDbDataAdapter dapt =null;
try
...{
conn = new OleDbConnection(this.ConnectionString);
conn.Open();
dapt = new OleDbDataAdapter(strSQL,conn);
//DataSet ds = new DataSet();
dapt.Fill(ds,"Table1");
System.Web.HttpContext.Current.Session[this.Page.ToString()] =ds;
}
catch (Exception e)
...{
throw(e);
//return null;
}
finally
...{
if(conn!=null)
conn.Dispose();
if(dapt!=null)
dapt.Dispose();
}
}
else
...{
ds =(DataSet)System.Web.HttpContext.Current.Session[this.Page.ToString()];
}
DataView dv =ds.Tables[0].DefaultView;
if(SortExpression!="")
dv.Sort = SortExpression ;
RecordCount = dv.Count;
DataTable dt = ds.Tables[0].Clone();
int iStart = (PageNo-1) * PageSize+1;
int iEnd = PageNo * PageSize;
//System.Web.HttpContext.Current.Response.Write(this.PageCount1);
if(iEnd>dv.Count)
iEnd = dv.Count;
if(iStart>0 && iEnd>=iStart)
...{
for(int i = iStart-1;i<iEnd;i++)
...{
DataRow row = dt.NewRow();
row.ItemArray = dv[i].Row.ItemArray;
dt.Rows.Add(row);
}
}
//ds = null;
dv = null;
ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
private string GetRequestValue(string sKey)
...{
object o = this.Page.Request.Form[sKey];
if(o!=null)
...{
return o.ToString().Trim();
}
return "";
}
public override void DataBind()
...{
if(this.Context == null)
...{
base.DataBind();
return;
}
if(this.ConnectionString =="")
...{
throw(new Exception("没有指定ConnectionString"));
}
if(this.strSQL =="")
...{
throw(new Exception("没有指定strSQL"));
}
int iCount =0;
//Add BY zhaofeng 2004-11-19
if(this.CurrentPageNo >this.PageCount1)
...{
this.CurrentPageNo = this.PageCount1;
}
if(this.CurrentPageNo == 0 )
this.CurrentPageNo = 1;
//Add End
DataSet ds = null;
if(this.bIsAccess)
ds = this.GetAccessResult(this.strSQL,this.IdentityKey,this.CurrentPageNo,this.PageSize,this.SortExpression,ref iCount);
else
ds = this.GetSqlResult(this.strSQL,this.IdentityKey,this.CurrentPageNo,this.PageSize,this.SortExpression,ref iCount);
this.RecordCount = iCount;
this.DataSource =ds.Tables[0].DefaultView;
base.DataBind ();
}
private void DoPager()
...{
string sAcionType = this.GetRequestValue("hidAction_"+this.ID);
switch (sAcionType)
...{
case "1":
this.CurrentPageNo =1;
break;
case "2":
if(this.CurrentPageNo >1)
...{
this.CurrentPageNo = this.CurrentPageNo -1;
}
else
return;
break;
case "3":
if(this.CurrentPageNo <this.PageCount1)
...{
this.CurrentPageNo = this.CurrentPageNo +1;
}
else
return ;
break;
case "4":
if(this.CurrentPageNo !=this.PageCount1 )
...{
this.CurrentPageNo = this.PageCount1;
}
else
return ;
break;
case "5": //Goto
string sCurPage = this.GetRequestValue("txtGoPage_"+this.ID);
if(CCConvert.IsInt32(sCurPage))
...{
int iCurrentPageNo = Convert.ToInt32(sCurPage);
if(iCurrentPageNo >0 && iCurrentPageNo <=this.PageCount1)
...{
this.CurrentPageNo = iCurrentPageNo;
}
}
else
return ;
break;
case "6"://重设显示页数
string sPageSize = this.GetRequestValue("txtRowsPager_"+this.ID);
if(CCConvert.IsInt32(sPageSize))
...{
int iPage = Convert.ToInt32(sPageSize);
if(iPage>0)
this.PageSize =iPage;
else
return ;
}
else
return;
break;
default:
return;
}
this.DataBind();
}
IPostBackEventHandler 成员#region IPostBackEventHandler 成员
public void RaisePostBackEvent(string eventArgument)
...{
if(eventArgument == "btnPager_"+this.ID)
...{
this.DoPager();
}
}
protected override void OnInit(EventArgs e)
...{
base.OnInit (e);
}
#endregion
}
}
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Data.OleDb;
namespace ZFControls
... {
/**//// <summary>
/// DataGrid
/// 实现功能
/// </summary>
[
ToolboxData("<{0}:DataGrid runat=server></{0}:DataGrid>"),
ToolboxBitmap(typeof(ZFControls.DataGrid), "Grid.bmp")
]
public class DataGrid : System.Web.UI.WebControls.DataGrid,IPostBackEventHandler
...{
public DataGrid()
...{
if(this.Context == null)
...{
this.ShowFooter = true;//显示设计视图
}
}
private int CurrentPageNo
...{
get
...{
if(ViewState["PageNo"]==null)
...{
ViewState["PageNo"] = 1 ;
}
return (int)ViewState["PageNo"];
}
set
...{
ViewState["PageNo"] =value;
}
}
/**//// <summary>
/// 是否在列表中显示记录数,默认为True
/// </summary>
private bool ShowRecordCount
...{
get
...{
if(ViewState["ShowRecordCount"]==null)
...{
ViewState["ShowRecordCount"] = true ;
}
return (bool)ViewState["ShowRecordCount"];
}
set
...{
ViewState["ShowRecordCount"] =value;
}
}
/**//// <summary>
/// 是否使用默认的样式 默认为true
/// </summary>
public bool bDefaultStyle
...{
get
...{
if(ViewState["DefaultStyle"]==null)
...{
ViewState["DefaultStyle"] = true ;
}
return (bool)ViewState["DefaultStyle"];
}
set
...{
ViewState["DefaultStyle"] =value;
}
}
public string SortExpression
...{
get
...{
if(ViewState["SortExpression"]==null)
...{
ViewState["SortExpression"] = "" ;
}
return (string)ViewState["SortExpression"];
}
set
...{
ViewState["SortExpression"] =value;
}
}
public bool bIsAccess
...{
get
...{
if(ViewState["IsAccess"]==null)
...{
ViewState["IsAccess"] = false ;
}
return (bool)ViewState["IsAccess"];
}
set
...{
ViewState["IsAccess"] =value;
}
}
private int RecordCount
...{
get
...{
if(ViewState["RecordCount"]==null)
...{
ViewState["RecordCount"] = 0;
}
return (int)ViewState["RecordCount"];
}
set
...{
ViewState["RecordCount"] =value;
}
}
public string IdentityKey
...{
get
...{
if(ViewState["IdentityKey"]==null)
...{
ViewState["IdentityKey"] = "";
}
return (string)ViewState["IdentityKey"];
}
set
...{
ViewState["IdentityKey"] =value;
}
}
private int PageCount1
...{
get
...{
if(this.Context == null) return 0;
if(this.RecordCount % this.PageSize ==0)
return this.RecordCount /this.PageSize;
else
return Convert.ToInt32(this.RecordCount /this.PageSize) +1;
}
}
private System.Web.UI.WebControls.DataGridItem objFooterItem; //footer Item
public string strSQL
...{
get
...{
if(ViewState["strSQL"]==null)
...{
ViewState["strSQL"] = "" ;
}
return (string)ViewState["strSQL"];
}
set
...{
if((string)value != this.strSQL)
...{
this.CurrentPageNo = 1;//更改了strSQL,重置参数
this.RecordCount = 0;
}
ViewState["strSQL"] =value;
}
}
public string ConnectionString
...{
get
...{
if(ViewState["ConnectionString"]==null)
...{
ViewState["ConnectionString"] = "";
}
return (string)ViewState["ConnectionString"];
}
set
...{
ViewState["ConnectionString"] =value;
}
}
public string ImagePath
...{
get
...{
if(ViewState["ImagePath"]==null)
...{
ViewState["ImagePath"] = "../images/" ;
}
return (string)ViewState["ImagePath"];
}
set
...{
ViewState["ImagePath"] =value;
}
}
private string OldSortExpression
...{
get
...{
if(ViewState["OldSortExpression"]==null)
...{
ViewState["OldSortExpression"] = "";
}
return (string)ViewState["OldSortExpression"];
}
set
...{
ViewState["OldSortExpression"] =value;
}
}
public bool ShowNoRecordMsg
...{
get
...{
if(ViewState["ShowNoRecordMsg"]==null)
...{
ViewState["ShowNoRecordMsg"] = true;
}
return (bool)ViewState["ShowNoRecordMsg"];
}
set
...{
ViewState["ShowNoRecordMsg"] =value;
}
}
private string GetStyleString()
...{
string res ="";
foreach(string sKey in this.Style.Keys)
...{
res += sKey +":"+ this.Style[sKey] +";";
}
return res;
}
protected override void OnSortCommand(DataGridSortCommandEventArgs e)
...{
string sSort = e.SortExpression.Trim();
if(this.SortExpression.Trim().Split(' ')[0] == e.SortExpression)
...{
sSort = this.SortExpression;
}
string direct ="ASC";
if (sSort.IndexOf(" ")>-1)
...{
direct = sSort.Split(' ')[1];
if(direct.ToUpper() =="ASC")
...{
direct ="DESC";
}
else
...{
direct ="ASC";
}
}
sSort = sSort.Split(' ')[0] +" "+ direct;
if(this.OldSortExpression!="")
...{
DataGridColumn oOldCol = this.GetColumnBySortExpression(this.OldSortExpression);
oOldCol.HeaderText = oOldCol.HeaderText.Split(' ')[0];
}
DataGridColumn col = GetColumnBySortExpression(e.SortExpression);
if(direct =="ASC")
...{
col.HeaderText = col.HeaderText.Split(' ')[0] +" <font class='gridarrow' face='webdings'>5</font>";
}
else
...{
col.HeaderText = col.HeaderText.Split(' ')[0] +" <font class='gridarrow' face='webdings'>6</font>";
}
this.OldSortExpression = e.SortExpression;
this.SortExpression = sSort;
this.DataBind();
}
private DataGridColumn GetColumnBySortExpression(string sort)
...{
for (int i=0;i<this.Columns.Count;i++)
...{
if(this.Columns[i].SortExpression ==sort.Split(' ')[0])
...{
return this.Columns[i];
}
}
return null;
}
protected override void OnItemCreated(DataGridItemEventArgs e)
...{
if(e.Item.ItemType == ListItemType.Footer)
...{
this.objFooterItem = e.Item;//将它保存下来,目前还不能取得它的Visible 属性,最后再处理
}
else if(e.Item.ItemType == ListItemType.Item
|| e.Item.ItemType == ListItemType.AlternatingItem)
...{
e.Item.Attributes.Add("onmouseover","javascript:return DataGridOnMouseOver();");
e.Item.Attributes.Add("onmouseout","javascript:return DataGridOnMouseOut();");
}
base.OnItemCreated (e);
}
private string GetPagerText ()
...{
string res = @"<!--{3}-->
<table align='right'>
<TR>
<TD>
<span {0} {9} title='回到首页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='1';btnPager_{2}.click();"" style='CURSOR: hand; ;border: solid 1px #ffffff;padding-right:2px;'><font face='webdings'>7</font>[首页]</span>
</TD>
<TD>
<span {0} {9} title='回到上一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='2';btnPager_{2}.click();"" style='CURSOR: hand; border: solid 1px #ffffff;padding-right:2px;'> <font face='webdings'>3</font>上页</span>
</TD>
<TD>
<span {1} {9} title='回到下一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='3';btnPager_{2}.click();"" style='CURSOR: hand;border: solid 1px #ffffff;padding-right:2px;'> 下页<font face='webdings'>4</font></span>
</TD>
<TD>
<span {1} {9} title='回到最后一页' οnclick=""if(this.disabled) return ;hidAction_{2}.value='4';btnPager_{2}.click();"" style='CURSOR: hand; border: solid 1px #ffffff;padding-right:2px;'>[末页]<font face='webdings'>8</font></span>
</TD>
<TD>
<span id='lblCurrentIndex' style='CURSOR: hand' >[{4}/{8}页]</span>
</TD><TD>
<span id='tbl1' style='CURSOR: hand;height:20px;border: solid 0px #e0e0e0;padding:2px;'></TD><TD>{10}</TD><TD>跳到</TD><TD></span><input name='txtGoPage_{2}' value='{7}' type='text' id='txtGoPage' class='textbox1' style='width:20px;height:18px' />
</TD><TD> <INPUT class='btnPager' οnclick=""hidAction_{2}.value='5';btnPager_{2}.click();"" type=button value=' GO '> </TD><TD>
<span id='tbl2' style='CURSOR: hand;height:20px;border: solid 0px #e0e0e0;padding:2px;'>每页显示</span></TD><TD><input name='txtRowsPager_{2}' type='text' id='txtRowsPager' value='{5}' class='textbox1' style='width:20px;height:18px' /></TD><TD> <INPUT class='btnPager' οnclick=""hidAction_{2}.value='6';btnPager_{2}.click();"" type=button value=重置>
</TD><TD><input name='hidAction_{2}' id='hidAction_{2}' type='hidden' />";
if(this.Context != null)//非设计视图
...{
res += @"
<input type='button' name='btnPager_{2}' id='btnPager_{2}' {6} value='Button' id='btnPager_{2}' style='DISPLAY: none' /> ";
}
res +=@"</TD><TD>
</TR></TABLE>";
//System.Web.HttpContext.Current.Response.Write(System.Web.HttpContext.Current.Server.HtmlEncode(res));
//System.Web.HttpContext.Current.Response.Flush();
string sP0 = this.CurrentPageNo > 1 ?"":"disabled";
string sP1 = this.CurrentPageNo < this.PageCount1 ?"":"disabled";
string sP2 = this.ID;
string sP3 = this.ImagePath ;
string sP4 = "<font color='red'>"+this.CurrentPageNo.ToString()+"</font>";
string sP5 = this.PageSize.ToString();
string sP6 = "οnclick="javascript:"+this.Page.GetPostBackEventReference(this,"btnPager_"+sP2)+""";
string sP7 = this.CurrentPageNo.ToString();
//System.Web.HttpContext.Current.Response.Write(this.PageCount1+"**");
string sP8 = "<font color='red'>"+this.PageCount1.ToString()+"</font>";
string sP9 = "οnmοuseοver='javascript:{0}_PagerOnMouseOver(this);' οnmοuseοut='javascript:{0}_PagerOnMouseOut(this);' οnmοusedοwn='javascript:{0}_PagerOnMouseDown(this);' οnmοuseup='javascript:{0}_PagerOnMouseUp(this);'";
string sP10 = "";
if(this.ShowRecordCount) //显示记录数
...{
sP10 = "[<font color='red'>"
+ (((this.CurrentPageNo-1)* this.PageSize)+1).ToString()+"</font>-<font color='red'>"
+( this.CurrentPageNo*this.PageSize <this.RecordCount?this.CurrentPageNo*this.PageSize:this.RecordCount ).ToString()+"</font>/<font color='red'>"+this.RecordCount.ToString()+"</font>条] ";
}
sP9 = String.Format(sP9,sP2);
res = String.Format(res,sP0,sP1,sP2,sP3,sP4,sP5,sP6,sP7,sP8,sP9,sP10);
string res1 = @"
<SCRIPT LANGUAGE='javascript'>
<!--
function {0}_PagerOnMouseOver(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText ='border-right:solid 1px gray;border-bottom:solid 1px gray ';
}
function {0}_PagerOnMouseOut(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText = '';
}
function {0}_PagerOnMouseDown(obj)
{
if(obj.disabled) return;
obj.runtimeStyle.cssText ='border-bottom:solid 1px white;border-right:solid 1px white;border-top:solid 1px gray;border-left:solid 1px gray;';
}
function {0}_PagerOnMouseUp(obj)
{
if(obj.disabled) return;obj.runtimeStyle.cssText = 'border-top:solid 1px white;border-left:solid 1px white;border-bottom:solid 1px gray;border-right:solid 1px gray;';
}
//-->
</SCRIPT>
<!--********************************************--->
";
//res1 = String.Format(res1,sP2);
res1 = res1.Replace("{0}",sP2);
return res+res1;
}
protected override void OnPreRender(EventArgs e)
...{
//base.OnPreRender(e);
//return;
if(bDefaultStyle)//默认的样式
...{
this.BorderColor = (Color)new System.Drawing.ColorConverter().ConvertFromString("#E3EDF5");
this.Attributes["Class"] = "GridTable";
}//处理FoooterItem
//找到第一个Visible = True的列
if(this.objFooterItem != null)
...{
int i = 0;
for (i = 0;i< this.Columns.Count;i++)
...{
if(this.Columns[i].Visible )
...{
break;
}
}
while(this.objFooterItem.Cells.Count>i+1)
...{
objFooterItem.Cells.RemoveAt(0);
}
objFooterItem.Cells[i].ColumnSpan = this.Columns.Count-i;
if(this.bDefaultStyle)
...{
objFooterItem.Cells[i].Attributes["class"] = "t1";
}
if(this.Items.Count ==0 && this.ShowNoRecordMsg) //没有记录
...{
this.objFooterItem.Cells[i].Text =@"<table width='100%' cellspacing='0' cellpadding='0'><TR><TD height='20px' style='color:gray' align='center'>信息:没有查询到任何记录!</td></tr>
</table>";
}
else
...{
this.objFooterItem.Cells[i].HorizontalAlign = HorizontalAlign.Right;
this.objFooterItem.Cells[i].Text = this.GetPagerText();
this.objFooterItem.Cells[i].Height = 22;
//e.Item.Cells[0].Style.Add("border-top","solid 2px #336699");
}
}
if(this.HeaderStyle.CssClass == "")
...{
this.HeaderStyle.CssClass = "gridheader";
}
if(this.ItemStyle.CssClass =="")
...{
this.ItemStyle.CssClass ="t1";
}
if(this.AlternatingItemStyle.CssClass =="")
...{
this.AlternatingItemStyle.CssClass ="t2";
}
this.ShowFooter = true;
base.OnPreRender (e);
}
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
/**//// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
...{
if(this.Context == null) //设计
...{
output.Write("<div style='width:100%;border:solid 1px #336699'>");
output.Write("<font color='orange'>请注意:<BR>1、必须指定的参数:ConnectString,strSQL<BR> 2、如果查询中只有一张表且有IdentityKey必须指定该Key</font>");
}
base.Render(output);
if(this.Context == null)
...{
output.Write(this.GetPagerText());
output.Write("<DIV>");
}
}
/**//// <summary>
/// 利用存储过程进行分页
/// </summary>
/// <param name="strSQl">sql</param>
/// <param name="PrimaryKey">关键字段,一般为表的主健</param>
/// <param name="PageNo">当前页从1开始</param>
/// <param name="PageSize">页面大小</param>
/// <param name="SortExpression">排序表达式</param>
/// <param name="RecordCount">记录总数</param>
/// <returns></returns>
public DataSet GetSqlResult(string strSQL,string PrimaryKey,int PageNo,int PageSize,string SortExpression,ref int RecordCount)
...{
SqlConnection conn =null;
SqlCommand cmd =null;
SqlDataAdapter dapt =null;
try
...{
conn= new SqlConnection(this.ConnectionString);
cmd = new SqlCommand("GetPageResult",conn);
cmd.CommandTimeout = 60000;
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pSql = cmd.Parameters.Add("@sql",SqlDbType.NVarChar,4000);
pSql.Value = strSQL;
SqlParameter pPKey = cmd.Parameters.Add("@PKey",SqlDbType.VarChar,50);
pPKey.Value = PrimaryKey;
SqlParameter pPageNo = cmd.Parameters.Add("@PageNo",SqlDbType.Int,4);
pPageNo.Value = PageNo;
SqlParameter pPageSize = cmd.Parameters.Add("@PageSize",SqlDbType.Int,4);
pPageSize.Value = PageSize;
SqlParameter pSort = cmd.Parameters.Add("@sort",SqlDbType.VarChar,50);
pSort.Value = SortExpression;
SqlParameter pRecordCount = cmd.Parameters.Add("@RecordCount",SqlDbType.Int,4);
//pRecordCount.Value = SortExpression;
pRecordCount.Direction = ParameterDirection.Output;
dapt = new SqlDataAdapter(cmd);
conn.Open();
DataSet ds = new DataSet();
dapt.Fill(ds,"Table1");
RecordCount =(int)pRecordCount.Value;
return ds;
}
catch (Exception e)
...{
throw(e);
//return null;
}
finally
...{
if(conn!=null)
conn.Dispose();
if(cmd!=null)
cmd.Dispose();
if(dapt!=null)
dapt.Dispose();
}
}
/**//// <summary>
/// 利用存储过程进行分页
/// </summary>
/// <param name="strSQl">sql</param>
/// <param name="PrimaryKey">关键字段,一般为表的主健</param>
/// <param name="PageNo">当前页从1开始</param>
/// <param name="PageSize">页面大小</param>
/// <param name="SortExpression">排序表达式</param>
/// <param name="RecordCount">记录总数</param>
/// <returns></returns>
public DataSet GetAccessResult(string strSQL,string PrimaryKey,int PageNo,int PageSize,string SortExpression,ref int RecordCount)
...{
DataSet ds = new DataSet();
if(System.Web.HttpContext.Current.Session[this.Page.ToString()]==null||(!this.Page.IsPostBack))
...{
OleDbConnection conn =null;
OleDbDataAdapter dapt =null;
try
...{
conn = new OleDbConnection(this.ConnectionString);
conn.Open();
dapt = new OleDbDataAdapter(strSQL,conn);
//DataSet ds = new DataSet();
dapt.Fill(ds,"Table1");
System.Web.HttpContext.Current.Session[this.Page.ToString()] =ds;
}
catch (Exception e)
...{
throw(e);
//return null;
}
finally
...{
if(conn!=null)
conn.Dispose();
if(dapt!=null)
dapt.Dispose();
}
}
else
...{
ds =(DataSet)System.Web.HttpContext.Current.Session[this.Page.ToString()];
}
DataView dv =ds.Tables[0].DefaultView;
if(SortExpression!="")
dv.Sort = SortExpression ;
RecordCount = dv.Count;
DataTable dt = ds.Tables[0].Clone();
int iStart = (PageNo-1) * PageSize+1;
int iEnd = PageNo * PageSize;
//System.Web.HttpContext.Current.Response.Write(this.PageCount1);
if(iEnd>dv.Count)
iEnd = dv.Count;
if(iStart>0 && iEnd>=iStart)
...{
for(int i = iStart-1;i<iEnd;i++)
...{
DataRow row = dt.NewRow();
row.ItemArray = dv[i].Row.ItemArray;
dt.Rows.Add(row);
}
}
//ds = null;
dv = null;
ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
private string GetRequestValue(string sKey)
...{
object o = this.Page.Request.Form[sKey];
if(o!=null)
...{
return o.ToString().Trim();
}
return "";
}
public override void DataBind()
...{
if(this.Context == null)
...{
base.DataBind();
return;
}
if(this.ConnectionString =="")
...{
throw(new Exception("没有指定ConnectionString"));
}
if(this.strSQL =="")
...{
throw(new Exception("没有指定strSQL"));
}
int iCount =0;
//Add BY zhaofeng 2004-11-19
if(this.CurrentPageNo >this.PageCount1)
...{
this.CurrentPageNo = this.PageCount1;
}
if(this.CurrentPageNo == 0 )
this.CurrentPageNo = 1;
//Add End
DataSet ds = null;
if(this.bIsAccess)
ds = this.GetAccessResult(this.strSQL,this.IdentityKey,this.CurrentPageNo,this.PageSize,this.SortExpression,ref iCount);
else
ds = this.GetSqlResult(this.strSQL,this.IdentityKey,this.CurrentPageNo,this.PageSize,this.SortExpression,ref iCount);
this.RecordCount = iCount;
this.DataSource =ds.Tables[0].DefaultView;
base.DataBind ();
}
private void DoPager()
...{
string sAcionType = this.GetRequestValue("hidAction_"+this.ID);
switch (sAcionType)
...{
case "1":
this.CurrentPageNo =1;
break;
case "2":
if(this.CurrentPageNo >1)
...{
this.CurrentPageNo = this.CurrentPageNo -1;
}
else
return;
break;
case "3":
if(this.CurrentPageNo <this.PageCount1)
...{
this.CurrentPageNo = this.CurrentPageNo +1;
}
else
return ;
break;
case "4":
if(this.CurrentPageNo !=this.PageCount1 )
...{
this.CurrentPageNo = this.PageCount1;
}
else
return ;
break;
case "5": //Goto
string sCurPage = this.GetRequestValue("txtGoPage_"+this.ID);
if(CCConvert.IsInt32(sCurPage))
...{
int iCurrentPageNo = Convert.ToInt32(sCurPage);
if(iCurrentPageNo >0 && iCurrentPageNo <=this.PageCount1)
...{
this.CurrentPageNo = iCurrentPageNo;
}
}
else
return ;
break;
case "6"://重设显示页数
string sPageSize = this.GetRequestValue("txtRowsPager_"+this.ID);
if(CCConvert.IsInt32(sPageSize))
...{
int iPage = Convert.ToInt32(sPageSize);
if(iPage>0)
this.PageSize =iPage;
else
return ;
}
else
return;
break;
default:
return;
}
this.DataBind();
}
IPostBackEventHandler 成员#region IPostBackEventHandler 成员
public void RaisePostBackEvent(string eventArgument)
...{
if(eventArgument == "btnPager_"+this.ID)
...{
this.DoPager();
}
}
protected override void OnInit(EventArgs e)
...{
base.OnInit (e);
}
#endregion
}
}
用到的存储过程:
SET
QUOTED_IDENTIFIER
OFF
GO
SET ANSI_NULLS OFF
GO
/* ****************************
名称:GetPageResult
功能:得到分页记录集
作者:cpp2017
编写时间:2002-08-17
**************************** */
CREATE PROCEDURE GetPageResult
@sql nvarchar ( 4000 ) , -- Sql Statment
@PKey varchar ( 100 ), -- -Primary Key Name
@PageNo int , -- Current Page No
@PageSize int , -- PageSize
@Sort varchar ( 50 ), -- Sort Field
@RecordCount int output -- RecordCount 传出参数
AS
BEGIN
DECLARE @sqlStr NVARCHAR ( 4000 );
-- -得到记录总数Start
if @RecordCount = - 1 or @RecordCount is null
begin
SET @sqlStr = ' select @count = Count(1) from ( ' + @sql + ' ) as AA ' ;
EXECUTE sp_executesql @sqlStr ,N ' @count int out ' , @RecordCount out;
end
-- -得到记录总数End
-- 加上排序 Start
IF @Sort IS not null and @sort <> ''
BEGIN
Set @sort = ' order by ' + @sort ;
END
-- 加上排序 End
IF ( @PageNo = 1 ) -- 第一页
SET @sqlStr = ' select top ' + cast ( @PageSize as varchar ( 5 )) + ' * FROM ( ' + @sql + ' ) AS AA ' + @sort
ELSE
BEGIN
declare @sMaxCount varchar ( 10 )
declare @sMinCount varchar ( 10 )
set @sMaxCount = cast ( @PageSize * @PageNo as varchar ( 5 ))
set @sMinCount = Convert ( nvarchar ( 10 ),( @PageNo - 1 ) * @PageSize )
if @PKey != '' or @PKey is null -- 如果有主键,注此key必须是identity key
begin
SET @sqlStr = ' select top ' + @sMaxCount + ' ' + @PKey + ' into #temp from ( ' + @sql + ' ) as AA ' + @sort + ' ; '
Set @sqlStr = @sqlStr + ' delete from #temp where ' + @PKey + ' in (select top ' + @sMinCount + ' ' + @PKey + ' from #temp); '
SET @sqlStr = @sqlStr + ' select A.* from ( ' + @sql + ' ) AS A INNER JOIN #temp as B ON A. ' + @PKey + ' =B. ' + @Pkey + ' ;drop table #temp '
end
else
Begin
SET @sqlStr = ' select top ' + @sMaxCount + ' * into #temp from ( ' + @sql + ' ) as AA ' + @sort + ' ; '
SET @sqlStr = @sqlStr + ' exec( '' alter table #temp add PrimaryKey int identity(1,1); '' ); delete from #temp where PrimaryKey in (select top ' + @sMinCount + ' PrimaryKey From #temp) '
SET @sqlStr = @sqlStr + ' ;select * from #temp;drop table #temp '
end
END
EXECUTE ( @sqlStr )
print @sqlstr
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
GO
SET ANSI_NULLS OFF
GO
/* ****************************
名称:GetPageResult
功能:得到分页记录集
作者:cpp2017
编写时间:2002-08-17
**************************** */
CREATE PROCEDURE GetPageResult
@sql nvarchar ( 4000 ) , -- Sql Statment
@PKey varchar ( 100 ), -- -Primary Key Name
@PageNo int , -- Current Page No
@PageSize int , -- PageSize
@Sort varchar ( 50 ), -- Sort Field
@RecordCount int output -- RecordCount 传出参数
AS
BEGIN
DECLARE @sqlStr NVARCHAR ( 4000 );
-- -得到记录总数Start
if @RecordCount = - 1 or @RecordCount is null
begin
SET @sqlStr = ' select @count = Count(1) from ( ' + @sql + ' ) as AA ' ;
EXECUTE sp_executesql @sqlStr ,N ' @count int out ' , @RecordCount out;
end
-- -得到记录总数End
-- 加上排序 Start
IF @Sort IS not null and @sort <> ''
BEGIN
Set @sort = ' order by ' + @sort ;
END
-- 加上排序 End
IF ( @PageNo = 1 ) -- 第一页
SET @sqlStr = ' select top ' + cast ( @PageSize as varchar ( 5 )) + ' * FROM ( ' + @sql + ' ) AS AA ' + @sort
ELSE
BEGIN
declare @sMaxCount varchar ( 10 )
declare @sMinCount varchar ( 10 )
set @sMaxCount = cast ( @PageSize * @PageNo as varchar ( 5 ))
set @sMinCount = Convert ( nvarchar ( 10 ),( @PageNo - 1 ) * @PageSize )
if @PKey != '' or @PKey is null -- 如果有主键,注此key必须是identity key
begin
SET @sqlStr = ' select top ' + @sMaxCount + ' ' + @PKey + ' into #temp from ( ' + @sql + ' ) as AA ' + @sort + ' ; '
Set @sqlStr = @sqlStr + ' delete from #temp where ' + @PKey + ' in (select top ' + @sMinCount + ' ' + @PKey + ' from #temp); '
SET @sqlStr = @sqlStr + ' select A.* from ( ' + @sql + ' ) AS A INNER JOIN #temp as B ON A. ' + @PKey + ' =B. ' + @Pkey + ' ;drop table #temp '
end
else
Begin
SET @sqlStr = ' select top ' + @sMaxCount + ' * into #temp from ( ' + @sql + ' ) as AA ' + @sort + ' ; '
SET @sqlStr = @sqlStr + ' exec( '' alter table #temp add PrimaryKey int identity(1,1); '' ); delete from #temp where PrimaryKey in (select top ' + @sMinCount + ' PrimaryKey From #temp) '
SET @sqlStr = @sqlStr + ' ;select * from #temp;drop table #temp '
end
END
EXECUTE ( @sqlStr )
print @sqlstr
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO