首页 | DV动态 | 数码产品 | 视频采编 | 网站建设 |
【收藏DV】
  最近3月排行
没有文章。
自定义分页控件用于DataGrid(使用SQL储存过程)
2005/11/21 0:11:09
 

分页储存过程:


/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明:
@tblName   包含数据的表名
      @PKName   关键字段名
@strGotFields 要获取的字段
      @PageSize   每页记录数
      @PageIndex   要获取的页码
      @OrderType   排序类型, 0 - 升序, 1 - 降序
      @strWhere   查询条件 (注意: 不要加 where)
@isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
@strSort 排序字段
*/
CREATE PROCEDURE GetRecordFromPage
  @tblName   varchar(255),    -- 表名
  @PKName   varchar(255),    -- 字段名
  @strGotFields varchar(1000) = '*' , --查询字段名
  @PageSize   int = 10,       -- 页尺寸
  @PageIndex  int = 1,       -- 页码
  @OrderType  bit = 0,       -- 设置排序类型, 非 0 值则降序
  @strWhere   varchar(2000) = '' , -- 查询条件 (注意: 不要加 where)
  @isCount bit = 1, --取得记录条数
  @strSort varchar(255) = '' --排序字段
AS
declare @strSQL varchar(6000)   -- 主语句
declare @strTmp varchar(1000)    -- 临时变量
declare @strOrder varchar(500)     -- 排序类型
declare @strCount varchar(1000)
declare @fldName varchar(255)
declare @sortName varchar(255)
declare @countSQL varchar(1000)

set @fldName = @PKName
if @strSort != ''
begin
  set @sortName = @strSort
end
else
begin
  set @sortName = @PKName
end

if @isCount = 1
begin
if @strWhere != ''
begin
   set @countSQL = 'select count(' + @fldName + ') from ' + @tblName + ' where ' + @strWhere
end
else
begin
   set @countSQL = 'select count(' + @fldName + ') from ' + @tblName
end
exec (@countSQL)
return
end
else
begin

if @OrderType != 0
begin
  set @strTmp = '<(select min'
  set @strOrder = ' order by ' + @sortName + ' desc'
end
else
begin
  set @strTmp = '>(select max'
  set @strOrder = ' order by ' + @sortName +' asc'
end

set @strSQL = 'select top ' + str(@PageSize) + @strGotFields + ' from '
  + @tblName + ' where ' + @fldName + '' + @strTmp + '('
  + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
  + @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'
  + @strOrder

if @strWhere != ''
  set @strSQL = 'select top ' + str(@PageSize) + @strGotFields + ' from '
    + @tblName + ' where ' + @fldName + '' + @strTmp + '('
    + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
    + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
  set @strTmp = ''
  if @strWhere != ''
    set @strTmp = ' where (' + @strWhere + ')'

  set @strSQL = 'select top ' + str(@PageSize) + @strGotFields + ' from '
    + @tblName + '' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)
end
GO


分页控件

在网上也查看了一些分页控件代码,大多都是做成通用的,对我所用的项目不太适合

自已写了一个功能不多,只分页与排序,刚合适合当前项目!

using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;

namespace WebAppInc
{
/// <summary>
/// /*
///函数名称: GetRecordFromPage
///函数功能: 获取指定页的数据
///参数说明:
///@tblName   包含数据的表名
///@PKName   关键字段名
///@strGotFields 要获取的字段
///@PageSize   每页记录数
///@PageIndex   要获取的页码
///@OrderType   排序类型, 0 - 升序, 1 - 降序
///@strWhere   查询条件 (注意: 不要加 where)
///@isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
/// @strSort 排序字段
///*/
/// </summary>
[DefaultProperty("EnableCustomerStyle"),
ToolboxData("<{0}:CusPageCtrl runat=server></{0}:CusPageCtrl>")]
public class CusPageCtrl:System.Web.UI.Control,IPostBackDataHandler, IPostBackEventHandler
{
private int _PageSize;
private int _PageCount;
private string _TableName;
private string _SelectFields;
private string _SortField;
private int _CurPageIndex;
private string _btDGrid;
private DataView _datasource;
private OrderType itype;
private string _SelectWhere;
private string _DataKeyField;
private string _selectClass;
private bool isCount = true;
private string _itemClass;

public enum OrderType
{
Asc,Desc
}
public string PageCssClass
{
get{ return _itemClass; }
set{ _itemClass = value;}
}
public string CurPageCssClass
{
get{ return _selectClass; }
set{ _selectClass = value;}
}
/// <summary>
/// 排序方式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public OrderType Order
{
get{ return itype; }
set{ itype = value;}
}

/// <summary>
/// 分页数
/// </summary>
public int PageCount
{
get{ return _PageCount; }
}
/// <summary>
/// 关键字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string SelectKeyField
{
get{ return _DataKeyField; }
set{ _DataKeyField = value;}
}
/// <summary>
/// 杳询条件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string SelectWhere
{
get{ return _SelectWhere; }
set{ _SelectWhere = value; }
}
/// <summary>
/// 数据源
/// </summary>
public DataView DataSource
{
get{ return _datasource; }
//set{ _datasource = value;}
}
/// <summary>
/// 要绑定的 DataGrid 控件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string BindToDataGrid
{
get{ return _btDGrid; }
set{ _btDGrid = value; }
}
/// <summary>
/// 当前页码索引
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public int CurPageIndex
{
get{ return _CurPageIndex; }
set{ _CurPageIndex = value; }
}
/// <summary>
/// 排序字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string SortField
{
get{ return _SortField; }
set{ _SortField = value;}
}
/// <summary>
/// 分页记录条数
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("25")]
public int PageSize
{
get{ return _PageSize; }
set{ _PageSize = value; }
}
/// <summary>
/// 查询数据来源表格
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string TableName
{
get{ return _TableName; }
set{ _TableName = value;}
}
/// <summary>
/// 查询字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("")]
public string SelectFields
{
get{ return _SelectFields; }
set{ _SelectFields = value; }
}

public bool LoadPostData(string postDataKey, NameValueCollection values)
{

_CurPageIndex = Int32.Parse(values[this.UniqueID]);
return false;
}

public void RaisePostDataChangedEvent()
{

// IPostBackDataHandler 协定的一部分。如果曾经从 LoadPostData 方法返回真
// (表示需要引发更改通知),则被调用。由于
// 始终返回假,则此方法只是一个空操作。
}
public void RaisePostBackEvent(string eventArgument)
{
     this.CurPageIndex = Convert.ToInt32(eventArgument);
   GetDataSource();
}

protected override void OnPreRender(EventArgs e)
{
//Page.RegisterPostBackScript();
//Page.Response.Write("2");
}


protected override void OnInit(EventArgs e)
{
DataGrid dGrid = (DataGrid)this.Parent.FindControl(this.BindToDataGrid);
dGrid.SortCommand += new DataGridSortCommandEventHandler(dGrid_SortCommand);
GetDataSource();  //获取数据源
GetDataSourcePageCount(); //获取页码数量
base.OnInit (e);
}

protected override void Render(HtmlTextWriter output)
{
//Page.Response.Write("3:" + this.PageCount.ToString());
int max;
int min;
int i,len;
int ShowSize = 10;
string tmp = null;
min = Convert.ToInt32(Math.Floor((this.CurPageIndex + 1) / ShowSize)) * ShowSize;
max = min + ShowSize;
len = this.PageCount;
if(max > len)
{
  max = len;
}
output.Write("<Div class=\"" + PageCssClass + "\">");
if(min >= ShowSize)
{
  output.Write("<a style=\"cursor:hand\" onClick=\"jscript:"+ Page.GetPostBackEventReference(this, (min-2).ToString())+ "\" title=\"向前翻页\"><font face=webdings>9</font></a> ");
}
for(i = min;i < max ;i++ )
{
  if(i == this.CurPageIndex)
  {
   tmp = "<font class=\"" + this.CurPageCssClass + "\">" + (i+1).ToString() + "</font>";
  }

  tmp = (i+1).ToString();
  if(i < max - 1)
  {
   output.Write("<a style=\"cursor:hand\" onclick=\"jscript:"+ Page.GetPostBackEventReference(this, i.ToString())+ "\">" + tmp + "</a>");
  }
  
  if(i < max - 2)
  {
   output.Write(" | ");
  }
  else if(i == max - 1 && (max == min + 10))
  {
   output.Write(" <a style=\"cursor:hand\" onClick=\"jscript:"+ Page.GetPostBackEventReference(this, i.ToString())+ "\" title=\"向后翻页\"><font face=webdings>:</font></a>");
  }
}
output.Write("</Div>");
output.Write("<input type=\"hidden\" name=" + this.UniqueID + " type=text value=" + this.CurPageIndex + ">");
if(max <= 0)
{
  output.Write("无数据!");
}
}
private void GetDataSourcePageCount()
{
if(ViewState["CurPageCount"] == null)
{
  this.isCount = true;
}
else
{
  return;
}
try
{
  SqlParameter[] arParams = new SqlParameter[9];
  arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,255);
  arParams[0].Value = this.TableName;
  arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
  arParams[1].Value = this.SelectFields;
  arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
  arParams[2].Value = this.SelectKeyField;
  arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
  arParams[3].Value = true;
  arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
  arParams[4].Value = this.PageSize;
  arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
  arParams[5].Value = 1;
  arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
  arParams[6].Value = this.SelectWhere;
  arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
  arParams[7].Value = this.isCount;
  arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
  arParams[8].Value = this.SelectKeyField;
  ViewState["CurPageCount"] = Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteScalar(ForDataBase.ConnectionString,CommandType.StoredProcedure,"GetRecordFromPage",arParams).ToString();
  this._PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToInt32(ViewState["CurPageCount"]) / this.PageSize));
  this._PageCount = Convert.ToInt32(ViewState["CurPageCount"]) / this.PageSize;
}
catch(Exception ex)
{
  Page.Response.Write(ex.Message);
}
//Page.Response.Write(ViewState["CurPageCount"].ToString());
}
private void GetDataSource()
{
bool tmp = true;
DataSet ds = new DataSet();
if(itype == OrderType.Desc)
{
  tmp = false;
}
this.isCount = false;
SqlParameter[] arParams = new SqlParameter[9];
arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,255);
arParams[0].Value = this.TableName;
arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
arParams[1].Value = this.SelectFields;
arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
arParams[2].Value = this.SortField;
arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
arParams[3].Value = tmp;
arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
arParams[4].Value = this.PageSize;
arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
arParams[5].Value = this.CurPageIndex + 1;
arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
arParams[6].Value = this.SelectWhere;
arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
arParams[7].Value = this.isCount;
arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
arParams[8].Value = this.SelectKeyField;
ds = Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteDataset(WebAppInc.ForDataBase.ConnectionString,CommandType.StoredProcedure,"GetRecordFromPage",arParams);
this._datasource = ds.Tables[0].DefaultView;
Page.Response.Write(Parent.FindControl(this.BindToDataGrid).ToString());
DataGrid dGrid = (DataGrid)this.Parent.FindControl(this.BindToDataGrid);
if(this.SortField != String.Empty)
{
  ViewState["Sort"] = this.SortField;
  if(tmp == true)
  {
   ViewState["Order"] = "asc";
  }
  else
  {
   ViewState["Order"] = "desc";
  }
  //DataGrid 控件排序样式
  if(ViewState["Sort"] != null)
  {
   int i=0;
   string strtmp = null;
   for(i=0;i<dGrid.Columns.Count;i++)
   {
   strtmp = dGrid.Columns[i].HeaderText;
   strtmp = strtmp.Replace("<font face=\"Webdings\">6</font>","");
   strtmp = strtmp.Replace("<font face=\"Webdings\">5</font>","");
   dGrid.Columns[i].HeaderText = strtmp;
   if(dGrid.Columns[i].SortExpression == ViewState["Sort"].ToString())
   {
   if(ViewState["Order"].ToString() == "desc")
   {
    dGrid.Columns[i].HeaderText = strtmp + "<font face=\"Webdings\">6</font>";
   }
   else
   {
    dGrid.Columns[i].HeaderText = strtmp + "<font face=\"Webdings\">5</font>";
   }
   }
   }
  }
}

dGrid.DataSource = this._datasource;
dGrid.DataBind();
//Page.Response.Write("<br>Exe Sort:" + SortField);
}
private void dGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
this.SortField = e.SortExpression;
string sort = e.SortExpression;
if(ViewState["Sort"] != null)
{
  if(ViewState["Sort"].ToString() != sort)
  {
   ViewState["Sort"] = sort;
   ViewState["Order"] = "desc";
  }
  else
  {
   if(ViewState["Order"].ToString() == "desc")
   {
   ViewState["Order"] = "asc";
   }
   else
   {
   ViewState["Order"] = "desc";
   }
  }
}
else
{
  ViewState["Sort"] = sort;
  ViewState["Order"] = "desc";
}
if(ViewState["Order"].ToString() == "desc")
{
  this.Order = OrderType.Desc;
}
else
{
  this.Order = OrderType.Asc;
}
GetDataSource();
//Page.Response.Write("<br>Sort:" + SortField);
}
}
}


(DVOL本文转自:中国DV传媒 http://www.dvol.cn)

欢迎关注微信公众账号:手机烟台(mYantai)

 

  上一篇:SqlServer下数据库链接的使用方法
  下一篇:代码交流 常用网页小代码
      更多...
::打印本页 ::      ::关闭窗口::


版权所有© 数码在线网站 DV OnLine©  鲁ICP备12016322号-1