简单的自定义分页控件实现(Asp.net)

  
通常把經常用到的功能塊封裝在一起﹐待用到時統一調用即可﹐這樣可以減少代碼的書寫﹐也利于維護。
對于class的封裝和user control的封裝從原理上還是有些相似。下面舉例說明user control 的使用.

自定義分頁控件﹕

1. 新建項目﹕ GridPage.ascx.  添加以下 control

<% @ Control Language="C#" AutoEventWireup="true" CodeFile="GridPage.ascx.cs" Inherits="Control_GridPage"  %>
< asp:Button  ID ="PrePage"  runat ="server"   Text ="PrePage"  OnClick ="PrePage_Click"   />
< asp:Button  ID ="NextPage"  runat ="server"   Text ="NextPage"  OnClick ="NextPage_Click"   />
< asp:DropDownList  ID ="DropDownList1"  runat ="server"  Width ="55px" >
</ asp:DropDownList >< asp:Button  ID ="btnpage"  runat ="server"   Text ="Go"  Width ="43px"   />

2.建立屬性﹕注意ViewState的用法: 取得狀態資訊的字典,允許您在相同網頁的多個要求之間,儲存和還原伺服器控制項的檢視狀態, 通常用在儲存屬性狀態值

private    int  pagecount;
    
public    int  Pagecount
    
{
        
get return (Int32)ViewState["pagecount"]; }
        
set {  ViewState["pagecount"= value; }
    }

    
private   string  gridname;
    
public   string  Gridname
    
{
        
get
        

            
return ViewState["DataGridName"].ToString();
        }

        
set
        

            ViewState[
"DataGridName"= value;
        }

    }

    
public    int  pageindex;
    
public    int  PageIndex
    
{
        
get
        
{
            
return (Int32)ViewState["pageindex"];
        }

        
set
        
{
           ViewState[
"pageindex"= value;
        }

    }

3.對響應的control建立對應的方法控制分頁﹕

  protected   void  Page_Load( object  sender, EventArgs e)
    
{
        
if (!IsPostBack)
        
{
            SetDataBind(PageIndex);
        }

    }

    
public   void  SetDataBind( int  CurpageIndex)
    
{
// 建立和DataGrid的數據關聯
        System.Web.UI.Control ctrl = this.Parent;
        DataGrid dg 
= (DataGrid)ctrl.FindControl(this.ViewState["DataGridName"].ToString());

        CDAL oDAL 
= new CDAL();
        DataSet ds 
= oDAL.GetData(CurpageIndex, Pagecount);//見下面定義
        dg.DataSource = ds.Tables[0];
        dg.DataBind();

    }

    
protected   void  NextPage_Click( object  sender, EventArgs e)
    
{
        PageIndex 
= PageIndex + 1;
        SetDataBind(PageIndex);    
    }

    
protected   void  PrePage_Click( object  sender, EventArgs e)
    
{
        PageIndex 
= PageIndex - 1;
        SetDataBind(PageIndex);    
    }

下面是GetData()方法的實現﹕
  
public  DataSet GetData( int  pageindex, int  pagesize)
        
{
            
//SqlConnection conn = new SqlConnection(ConnStrSql);
            
//conn.Open();
            
//SqlCommand cmd = new SqlCommand("GetData", conn);
            
//cmd.CommandType = CommandType.StoredProcedure;
            
//cmd.Parameters.AddWithValue("@sMachType", "");
            
//cmd.Parameters.AddWithValue("@pagecount",pagecount);
            
//cmd.Parameters.AddWithValue("@pagesize", 15);
            
//SqlDataAdapter ada = new SqlDataAdapter(cmd);
            
//DataSet ds = new DataSet();
            
//ada.Fill(ds);
            
//return ds;
            
//conn.Close();
            
//----------------------Oracle Test--------------
            OracleConnection conn2 = new OracleConnection(ConnStrOracle);
            conn2.Open();
            OracleCommand cmd2 
= new OracleCommand("GetData", conn2);//Procedure
            cmd2.CommandType = CommandType.StoredProcedure;
            cmd2.Parameters.AddWithValue(
"MachType""");
            cmd2.Parameters.AddWithValue(
"pageIndex", pageindex);
            cmd2.Parameters.AddWithValue(
"pagesize", pagesize);
            cmd2.Parameters.Add(
"c", OracleType.Cursor);
            cmd2.Parameters[
"c"].Direction = ParameterDirection.Output;
            OracleDataAdapter ada2 
= new OracleDataAdapter(cmd2);
            DataSet ds2 
= new DataSet();
            ada2.Fill(ds2);
            conn2.Close();
            
return ds2;
        }

 

4.Asp.net頁面控制user control:

Html:
1 )添加引用
<% @ Register Src  = " ~/Control/GridPage.ascx "  TagName  = " gv "  TagPrefix  = " UserDg "   %>
2 )實例化
// 此處建立datagrid控件﹕gvContent
< UserDg:gv ID = " MyDg "  runat  = " server "   />
C#﹕
Page_Load事件:給控件屬性賦值
MyDg.Gridname 
=   " gvContent " ;
            MyDg.PageIndex 
=   1 ;
            MyDg.Pagecount 
=   10 ;

 

對應的Procedure(Oracle 10g )

CREATE   OR   REPLACE   PROCEDURE  GetData
(MachType 
in   varchar2 ,
 pageIndex 
in   number ,
 pagesize 
in   number ,
 c out sys_refcursor
 )
 
IS
maxcount 
number ( 10 );
mincount 
number ( 10 );

BEGIN
   maxcount:
= pageIndex * pagesize;
   mincount:
= (pageIndex - 1 ) * pagesize;
   
-- if (MachType='') then
     open  c  for
     
select   *   from  ( select  rownum id,"allinfor". *   from  "allinfor"  where  rownum < maxcount)  where  id > mincount;
   
-- end if;
   
   EXCEPTION
     
WHEN  NO_DATA_FOUND  THEN
       
NULL ;
     
WHEN  OTHERS  THEN
       
--  Consider logging the error and then re-raise
       RAISE;
END  GetData;

Sql server 2005

 

set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go

ALTER   procedure   [ dbo ] . [ getdata ]
@sMachType   varchar ( 20 ),
@pageCount   int ,
@pagesize   int
AS

declare   @mincount   int ;
declare   @maxcount   int ;
set   @mincount = ( @pagecount - 1 ) * @pagesize ;
set   @maxcount = @pagecount * @pagesize ;

begin
if   object_id ( ' tmp ' is   not   null  
drop   table  tmp;

select   identity ( int , 1 , 1 as  RowID, *   into  tmp  from  allinfor;              -- 篶Θ斑患糤ID.
if   @sMachType   = ''
begin
select   *   from  tmp  where  RowID  between   @mincount   and   @maxcount ;
end
else
begin
select   *   from  tmp  where  RowID  between   @mincount   and   @maxcount   and  machtype = @sMachType ;
end
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值