GridView+存储过程实现自定义分页!其实很简单,主要是怎么保存当前页面的页码PageIndex问题,不过把这个解决了什么都好办了.因为在分页过程中:PageSize是一定的,我们可以用一个属性[GridView1.PageSize]来表示即可.保存PageIndex好多中方法,而且数据不是很庞大,基本不会好太多的资源.在这里使用ViewState来保存当前的PageIndex和PageCount[总页数].还是一句老话,话再多都没有例子直观.
在这里我还有一个疑惑:第一次读入的时候是PageIndex为0,但是点击首页的时候,为什么非得是1呢?
存储过程里的判断条件是if(PageIndex=1)啊!
这个问题搞不明白.但是放心,这种分页是绝对能出来的.我以例子保证.*_*
存储过程:
CREATE
PROCEDURE
sp_PagerAD
(
@adAddressId varchar ( 50 ), -- 广告位编号
@PageSize int , -- 一页显示记录数
@PageIndex int -- 当前页码(从1开始)
)
as
declare @strSQL nvarchar ( 1000 ) -- 主语句
-- 如果广告位编号为空,则显示全部信息
if ( @adAddressId = ' NO ' )
begin
-- 如果只有一页
if ( @PageIndex = 1 )
begin
set @strSQL = " select top " + str ( @PageSize ) + " * from ad order by id"
-- 一定要order by,否则数据读取可能出错
end
-- 如果不只一页
else if ( @PageIndex > 1 )
begin
set @strSQL = " select top " + str ( @Pagesize ) + " * from ad where id
not in ( select top " + str ( @PageSize * ( @PageIndex - 1 )) + "
id from ad order by id) order by id"
end
end
-- 如果广告位编号不为空,则显示对应信息
else
begin
-- 和上面差不多的做法
end
exec ( @strSQL )
GO
(
@adAddressId varchar ( 50 ), -- 广告位编号
@PageSize int , -- 一页显示记录数
@PageIndex int -- 当前页码(从1开始)
)
as
declare @strSQL nvarchar ( 1000 ) -- 主语句
-- 如果广告位编号为空,则显示全部信息
if ( @adAddressId = ' NO ' )
begin
-- 如果只有一页
if ( @PageIndex = 1 )
begin
set @strSQL = " select top " + str ( @PageSize ) + " * from ad order by id"
-- 一定要order by,否则数据读取可能出错
end
-- 如果不只一页
else if ( @PageIndex > 1 )
begin
set @strSQL = " select top " + str ( @Pagesize ) + " * from ad where id
not in ( select top " + str ( @PageSize * ( @PageIndex - 1 )) + "
id from ad order by id) order by id"
end
end
-- 如果广告位编号不为空,则显示对应信息
else
begin
-- 和上面差不多的做法
end
exec ( @strSQL )
GO
CS文件:
using
System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Admin_List_AD : System.Web.UI.Page
... {
SqlConnection conn;
SqlCommand mycmd;
GetData GD = new GetData();
DataSet ds = new DataSet();
CheckBox cb;
string sql;
protected void Page_Load(object sender, EventArgs e)
...{
//判断Cookies["admin"]["adminName"];Cookies["admin"]["adminId"]是否存在
if (Request.Cookies["admin"] == null)
...{
Response.Redirect("AdminLogin.aspx");
}
//判断Cookies["admin"]是否存在
else if (Request.Cookies["admin"]["adminName"] == null && Request.Cookies["admin"]["adminId"] == null)
...{
Response.Redirect("AdminLogin.aspx");
}
else
...{//保存用户名和用户编号
ViewState["adminName"] = Request.Cookies["admin"]["adminName"].ToString();
ViewState["adminId"] = Request.Cookies["admin"]["adminId"].ToString();
}
//启动智能导航
Page.SmartNavigation = true;
if (!IsPostBack)
...{
ViewState["adAddressId"] = "";
if (Request.QueryString["adAddressId"] != null)
...{
ViewState["adAddressId"] = Request.QueryString["adAddressId"].ToString();
}//获取当前页,总页数
ListADInfo(ViewState["adAddressId"].ToString());
SearchProduct(ViewState["adAddressId"].ToString(),GridView1.PageSize,0);
}
}
public void ListADInfo(string adAddressId)
...{
if (adAddressId == "")
...{
sql = "select * from ad";
}
else
...{
sql = "select * from ad where id = " + adAddressId;
}
ds = GD.DataBind(sql);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
//总页数
LblPageCount.Text = GridView1.PageCount.ToString();
ViewState["PageCount"] = GridView1.PageCount.ToString();
//当前页
LblCurrentIndex.Text = Convert.ToString(GridView1.PageIndex + 1);
ViewState["pageIndex"] = Convert.ToString(GridView1.PageIndex + 1);
//判断首页,上一页,下一页,尾页是否可用;
CheckPageCount();
}
/**//// <summary>
/// 查找所有区域信息
/// </summary>
/// <param name="adAddressId">广告位编号</param>
/// <param name="PageSize">每页数量</param>
/// <param name="CurrentPage">当前页码</param>
public void SearchProduct(string adAddressId, int PageSize, int CurrentPage)
...{
conn = GD.Conn();
conn.Open();
if (adAddressId == "")
...{
adAddressId = "NO";
}
//调用存储过程
mycmd = new SqlCommand("sp_PagerAD", conn);
mycmd.CommandType = CommandType.StoredProcedure;
//每页数量
mycmd.Parameters.Add(new SqlParameter("@PageSize", SqlDbType.Int));
mycmd.Parameters["@PageSize"].Value = PageSize;
//当前页码
mycmd.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int));
mycmd.Parameters["@PageIndex"].Value = CurrentPage;
//广告位编号
mycmd.Parameters.Add(new SqlParameter("@adAddressId", SqlDbType.VarChar, 50));
mycmd.Parameters["@adAddressId"].Value = adAddressId;
//在这里只能用DataSet,不可以用ExecuteReader,因为他是按顺序读取,不支持分页
SqlDataAdapter sda = new SqlDataAdapter(mycmd);
sda.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
/**/////总页数
LblPageCount.Text = ViewState["PageCount"].ToString();
/**/////当前页
LblCurrentIndex.Text = (Convert.ToInt32(ViewState["pageIndex"].ToString())).ToString();
/**/////判断首页,上一页,下一页,尾页是否可用;
CheckPageCount();
}
//如果当前只有一页,则四者皆不可用,如果当前页为1,则首页不可用,如果当前页为未页,则尾页不能用.
public void CheckPageCount()
...{
first.Enabled = true;
prev.Enabled = true;
next.Enabled = true;
Last.Enabled = true;
int i = Convert.ToInt32(ViewState["PageCount"].ToString());
//如果只有一页
if (i == 1)
...{
first.Enabled = false;
prev.Enabled = false;
next.Enabled = false;
Last.Enabled = false;
}
else if (Convert.ToInt32(ViewState["pageIndex"].ToString()) == 1)
...{
first.Enabled = false;
prev.Enabled = false;
}
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) == Convert.ToInt32(ViewState["PageCount"].ToString()))
...{
Last.Enabled = false;
next.Enabled = false;
}
}
//首页
protected void first_Click(object sender, EventArgs e)
...{
ViewState["pageIndex"] = 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, 1);
}
//上一页
protected void prev_Click(object sender, EventArgs e)
...{
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) > 0)
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"].ToString()) - 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
}
//下一页
protected void next_Click(object sender, EventArgs e)
...{
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) < Convert.ToInt32(ViewState["PageCount"].ToString()))
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"].ToString()) + 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
}
//尾页
protected void Last_Click(object sender, EventArgs e)
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["PageCount"].ToString());
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
/**//// <summary>
/// 批量删除所选商品
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
int ADId;
protected void Button3_Click(object sender, EventArgs e)
...{
for (int i = 0; i < GridView1.Rows.Count; i++)
...{
IsCheckBox(i);
if (cb.Checked)
...{
GD.OperateAD(ADId, "DelAD");
}
}
//重新绑定
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
private void IsCheckBox(int i)
...{
cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
ADId = Convert.ToInt32(GridView1.Rows[i].Cells[1].Text.ToString());
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Admin_List_AD : System.Web.UI.Page
... {
SqlConnection conn;
SqlCommand mycmd;
GetData GD = new GetData();
DataSet ds = new DataSet();
CheckBox cb;
string sql;
protected void Page_Load(object sender, EventArgs e)
...{
//判断Cookies["admin"]["adminName"];Cookies["admin"]["adminId"]是否存在
if (Request.Cookies["admin"] == null)
...{
Response.Redirect("AdminLogin.aspx");
}
//判断Cookies["admin"]是否存在
else if (Request.Cookies["admin"]["adminName"] == null && Request.Cookies["admin"]["adminId"] == null)
...{
Response.Redirect("AdminLogin.aspx");
}
else
...{//保存用户名和用户编号
ViewState["adminName"] = Request.Cookies["admin"]["adminName"].ToString();
ViewState["adminId"] = Request.Cookies["admin"]["adminId"].ToString();
}
//启动智能导航
Page.SmartNavigation = true;
if (!IsPostBack)
...{
ViewState["adAddressId"] = "";
if (Request.QueryString["adAddressId"] != null)
...{
ViewState["adAddressId"] = Request.QueryString["adAddressId"].ToString();
}//获取当前页,总页数
ListADInfo(ViewState["adAddressId"].ToString());
SearchProduct(ViewState["adAddressId"].ToString(),GridView1.PageSize,0);
}
}
public void ListADInfo(string adAddressId)
...{
if (adAddressId == "")
...{
sql = "select * from ad";
}
else
...{
sql = "select * from ad where id = " + adAddressId;
}
ds = GD.DataBind(sql);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
//总页数
LblPageCount.Text = GridView1.PageCount.ToString();
ViewState["PageCount"] = GridView1.PageCount.ToString();
//当前页
LblCurrentIndex.Text = Convert.ToString(GridView1.PageIndex + 1);
ViewState["pageIndex"] = Convert.ToString(GridView1.PageIndex + 1);
//判断首页,上一页,下一页,尾页是否可用;
CheckPageCount();
}
/**//// <summary>
/// 查找所有区域信息
/// </summary>
/// <param name="adAddressId">广告位编号</param>
/// <param name="PageSize">每页数量</param>
/// <param name="CurrentPage">当前页码</param>
public void SearchProduct(string adAddressId, int PageSize, int CurrentPage)
...{
conn = GD.Conn();
conn.Open();
if (adAddressId == "")
...{
adAddressId = "NO";
}
//调用存储过程
mycmd = new SqlCommand("sp_PagerAD", conn);
mycmd.CommandType = CommandType.StoredProcedure;
//每页数量
mycmd.Parameters.Add(new SqlParameter("@PageSize", SqlDbType.Int));
mycmd.Parameters["@PageSize"].Value = PageSize;
//当前页码
mycmd.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int));
mycmd.Parameters["@PageIndex"].Value = CurrentPage;
//广告位编号
mycmd.Parameters.Add(new SqlParameter("@adAddressId", SqlDbType.VarChar, 50));
mycmd.Parameters["@adAddressId"].Value = adAddressId;
//在这里只能用DataSet,不可以用ExecuteReader,因为他是按顺序读取,不支持分页
SqlDataAdapter sda = new SqlDataAdapter(mycmd);
sda.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
/**/////总页数
LblPageCount.Text = ViewState["PageCount"].ToString();
/**/////当前页
LblCurrentIndex.Text = (Convert.ToInt32(ViewState["pageIndex"].ToString())).ToString();
/**/////判断首页,上一页,下一页,尾页是否可用;
CheckPageCount();
}
//如果当前只有一页,则四者皆不可用,如果当前页为1,则首页不可用,如果当前页为未页,则尾页不能用.
public void CheckPageCount()
...{
first.Enabled = true;
prev.Enabled = true;
next.Enabled = true;
Last.Enabled = true;
int i = Convert.ToInt32(ViewState["PageCount"].ToString());
//如果只有一页
if (i == 1)
...{
first.Enabled = false;
prev.Enabled = false;
next.Enabled = false;
Last.Enabled = false;
}
else if (Convert.ToInt32(ViewState["pageIndex"].ToString()) == 1)
...{
first.Enabled = false;
prev.Enabled = false;
}
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) == Convert.ToInt32(ViewState["PageCount"].ToString()))
...{
Last.Enabled = false;
next.Enabled = false;
}
}
//首页
protected void first_Click(object sender, EventArgs e)
...{
ViewState["pageIndex"] = 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, 1);
}
//上一页
protected void prev_Click(object sender, EventArgs e)
...{
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) > 0)
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"].ToString()) - 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
}
//下一页
protected void next_Click(object sender, EventArgs e)
...{
if (Convert.ToInt32(ViewState["pageIndex"].ToString()) < Convert.ToInt32(ViewState["PageCount"].ToString()))
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"].ToString()) + 1;
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
}
//尾页
protected void Last_Click(object sender, EventArgs e)
...{
ViewState["pageIndex"] = Convert.ToInt32(ViewState["PageCount"].ToString());
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
/**//// <summary>
/// 批量删除所选商品
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
int ADId;
protected void Button3_Click(object sender, EventArgs e)
...{
for (int i = 0; i < GridView1.Rows.Count; i++)
...{
IsCheckBox(i);
if (cb.Checked)
...{
GD.OperateAD(ADId, "DelAD");
}
}
//重新绑定
SearchProduct(ViewState["adAddressId"].ToString(), GridView1.PageSize, Convert.ToInt32(ViewState["pageIndex"].ToString()));
}
private void IsCheckBox(int i)
...{
cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
ADId = Convert.ToInt32(GridView1.Rows[i].Cells[1].Text.ToString());
}
}