GridView+存储过程实现自定义分页

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

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());
    }

}



注明:原帖地址:http://blog.csdn.net/Love1221/archive/2007/06/14/1651551.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值