简单的自定义分页控件实现(Asp.net)
来源:互联网 发布:加工中心g76编程实例 编辑:程序博客网 时间:2024/05/16 09:14
通常把經常用到的功能塊封裝在一起﹐待用到時統一調用即可﹐這樣可以減少代碼的書寫﹐也利于維護。
對于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" />
<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;
}
}
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;
}
...{
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;
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
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;
(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
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
- 简单的自定义分页控件实现(Asp.net)
- asp.net自定义分页控件
- ASP.NET自定义简单分页
- Asp.net 利用Repeater和ObjectDataSource 实现自定义分页控件
- [ASP.NET]简单的自定义控件
- 简单的asp.net自定义控件
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.net中DataGrid控件的自定义分页
- Asp.Net 可自定义分页用户控件
- 自定义分页控件源码asp.net(c#)
- Asp.Net自定义控件分页功能
- asp.net web页面自定义分页控件
- ASP.NET自定义控件 简单的星级控件
- UML类图关系详解
- 一个IP建多个Web站点--主机头名法
- 野指针,以及c++中的野指针[基础讲座]
- 最新分页存储过程(增加了选择字段列表、排序方式参数)
- 做网站需要知道50件事情
- 简单的自定义分页控件实现(Asp.net)
- 做一个可以支持万台以上电脑的路由器
- 没有博客的懊悔
- Linux 内核解读入门---喻锋荣[投稿文章] - China Linux Forum
- VSS使用规范
- 海量数据库的查询优化及分页算法方案
- SQLSERVER内核架构剖析
- Asp.net 2.0 自定义控件开发[浮动工具条控件](示例代码下载)
- 利用Rational Rose 和 VSS实现团队建模