国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ASP.NET自定義分頁導(dǎo)航控件設(shè)計

2017-04-27 08:25蔣亞虎陳永松
電腦知識與技術(shù) 2016年29期

蔣亞虎 陳永松

摘要:針對ASENET開發(fā)中分頁的需求,提出一種可行的方案,開發(fā)自定義的分頁導(dǎo)航控件,可應(yīng)用于需要分頁導(dǎo)航功能的任何數(shù)據(jù)綁定控件。分頁導(dǎo)航控件和數(shù)據(jù)是分離的,數(shù)據(jù)的顯示由用戶控制。通過設(shè)置分頁導(dǎo)航控件屬性和編寫簡單調(diào)用代碼,實現(xiàn)分頁導(dǎo)航功能,還可以通過URL切換頁碼。文章介紹了自定義分頁導(dǎo)航控件的設(shè)計過程,并通過實例詳細(xì)介紹了分頁導(dǎo)航控件的使用方法。

關(guān)鍵詞:ASP.NET;分頁導(dǎo)航控件;URL

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)29-0004-04

在ASP.NET開發(fā)中,為了方便排版及瀏覽,經(jīng)常需要使用分頁來實現(xiàn)。在數(shù)據(jù)量不大的情況下可以使用數(shù)據(jù)綁定控件的分頁功能n,實現(xiàn)這一需求。對于數(shù)據(jù)量較大的需求,一般通過編寫SQL語句或存儲過程實現(xiàn)分頁。分頁功能實現(xiàn)難度不大,但要實現(xiàn)功能較為完善的分頁導(dǎo)航功能,代碼編寫量大而且代碼重用率低。本文提出一種利用Repeater控件實現(xiàn)自定義分頁導(dǎo)航控件的方法,代碼實現(xiàn)簡單,可重用率高。

1分頁導(dǎo)航控件前端設(shè)計

在VS2010中添加一個Web用戶控件,文件名為Pager.as-cx。前端代碼設(shè)計如圖1所示。

前端設(shè)計后效果如圖2所示,其中數(shù)據(jù)綁定用來顯示相應(yīng)的頁碼。

2分頁導(dǎo)航控件后端設(shè)計

2.1屬性和事件定義

在pager類中定義三個屬性PageSizef導(dǎo)航中顯示的頁碼數(shù))、PerPageRecord(每頁記錄數(shù))、RecordCount(總記錄數(shù))。代碼如下:

public im PageSize{get;set;}

public int PerPageRecord{get;set;}

public im RecordCount{get;set;}

定義屬性PageCount(總頁數(shù)),與lblSumPage控件關(guān)聯(lián)。

public im PageCount

{

get

{

return Convert.ToInt320blSumPage.Text);

}

set

{

lblSumPage.Text=value.ToString();

}

}

定義屬性CurrentPage(當(dāng)前頁碼),與ltlCurrentPage控件關(guān)聯(lián)。

public im CurrentPage

{

get

{

return Convert.ToInt32(ltlCurrentPage.Text);

}

set

{

hlCurrentPage.Text=value.ToString();

}

}

定義事件ItemCommand(點擊頁碼之后觸發(fā)的事件),代碼如下:

public event RepeaterCommandEventHandler ItemCommand;

2.2分頁導(dǎo)航代碼實現(xiàn)

分頁導(dǎo)航控件的原理是通過控制lbtnPager控件顯示的數(shù)量和效果來實現(xiàn)分頁導(dǎo)航效果,為了方便代碼的書寫,定義pa-genum類,代碼如下:

public class pagenum

{

public string text{get;set;}

publicint Bum{get;set;}

publicbool enable{get;set;}

}

定義計算總頁數(shù)方法。

public void calcPageCount()

{

if(PerPageRecord==0)

PerPageRecord=20;

PageCount=(RecordCount-1)/PerPageRecord+1;

}

定義bind方法,功能是根據(jù)總頁數(shù)、當(dāng)前頁碼、導(dǎo)航中顯示的頁碼數(shù),控制lbtnPager控件顯示的數(shù)量和效果。

public void bind()

{

if(PageCount<=1)

spanl.Visible=false;

else

{

if(PageSize==0)PageSize=5;

if(CurrentPage>PageCount)

CurrentPage=PageCount;

Listnums=new ListO;

if(CurrentPage !=1)//如果不是首頁

{

pagenum nun=new pagenumO;

num.text="首頁";

num.num=1:

num.enable=true;

BUlTIS.Add(num);

}

int m=fcurrentPage-1)/PageSize;

if(m !=0)//如果不是1~PageSize頁

{

pagenum num=new pagenum0;

num.text="…":

num.num=m*PageSize;

num.enable=true;

nums.Add(num);

}

for(intj=1;j<=PageSize;j++)

//添加m*PageSize+1-m*PageSize+PageSize頁頁碼

{

if(j+m*PageSize>PageCounI)break;

pagenum num=new pagenum();

Bum.text=(i+m*PageSize).ToString();

Bum.num=j+m*PageSize;

if(j+m*PageSize==CurrentPage)

Hum.enable=false;

else

Bum.enable=true;

nums.Add(hum);

}

if((m+1)*PageSize

//如果最后一頁的頁碼沒顯示

{

pagenum hum=new pagenum0;

num.text="…":

Bum.BUm=((m+1)*PageSize+1);

Hum.enable=true;

nums.Add(num);

}

if(CurrentPage!=PageCount)//如果不是尾頁

{

pagenum Bum=new pagenumO;

Bum.text="尾頁":

Bum.num=PageCount;

Bum.enable=true;

nums.Add(num);

}

rptPage.DataSource=nums;

}

rptPage.DataBind0;

}

定義Refresh方法,調(diào)用calcPageCount和bind方法,刷新分頁導(dǎo)航控件。

public void Refresh()

{

calcPageCount();

bind();

}

定義PageFromUrl方法,根據(jù)Url地址返回當(dāng)前頁碼。

pubhc void PageFromUn()

{

if(Request.QueryString[”Page”]!=null)

{

inti:

int.TryParse(Request.QueryStrind["Page"],out i);

if(i!=0)CurrentPage=i;

}

}

定義PageToUrl方法,根據(jù)所選頁碼,生成Url地址。

public void PageToUA0

{

string url=Request.Url.ToString0;

im n=url.IndexOf("?Page=");

if(n==1)n=url.Length;

Response.Redirect(url.Substring(0,n)+"?Page="+Cur-rentPage);

}

定義rptPage_ItemCommand事件代碼,點擊頁碼后可觸發(fā)用戶事件。

CurrentPage=Convert.ToInt32(e.CommandArgument);

ItemCommand(source,e);

bind();

3使用分頁導(dǎo)航控件

3.1引入分頁導(dǎo)航控件

將分頁導(dǎo)航控件復(fù)制到ASP.NET網(wǎng)站中,然后在web窗體頁面中利用@Register指令引入。如圖3所示。

引入分頁導(dǎo)航控件后,通過ucl:Pager標(biāo)記將控件顯示在需要的位置,以及屬性設(shè)置。如圖4所示。

3.2使用分頁導(dǎo)航控件的實例

下面以Repeater控件綁定Student表數(shù)據(jù)為例介紹分頁導(dǎo)航控件的使用。

3.2.1前端設(shè)計

添加一個Repeater控件,設(shè)置前端代碼如圖5所示。

然后在Repeater控件下方添加一個分頁導(dǎo)航控件,代碼如圖4所示。

3.2.2后端設(shè)計

定義calcRecordCount方法,功能是計算Student表的記錄數(shù),其中cns為連接串。

void calcRecordCount()

{

using(SqlConnection cn=new SqlConnection(cns))

{

string sql="select count(1)from student";

SqlCommand cm=new SqlCommand(sql,cn);

cn.Open();

int n=(int)cm.ExecuteScalar0;

pgrStudent.RecordCount=n:

}

}

定義bind方法,功能是將指定頁碼的數(shù)據(jù)綁定到Repeater控件。

void bind()

{

string sql="select*from(select sid,sname,sex,birth,"+

"row_numbero over(order by sid)Hum from student)as a"+

"where nun between"+

"(@CurrnetPage-1)*@PerPageRecord+1"+

"and@CurrnetPage*@PerPageRecord":

using(SqlConnection cn=new SqlConnection(cns))

{

SqlParameter[]para=

{

new SqlParameter

("@CurrnetPage",pgrStudent.CurrentPage),

new SqlParameter

("@PerPageRecord",pgrStudent.PerPageRecord)

};

SqlCommand cm=new SqlCommand(sql,cn);

cm.Parameters.AddRange(para);

cn.Open();

rptStudent.DataSource=cm.ExecuteReader();

rptStudent.DataBind();

}

}

編寫Load事件代碼,功能是首次加載時初始化顯示的數(shù)據(jù)。

protected void Page_Load(object sender,EventArgs e)

{

if(!IsPostBack)

{

calcRecordCount();

pgrStudent.Refresh();

bind();

}

}

編寫pgrStudent_ItemCommand事件代碼,定義點擊頁碼后需要顯示的數(shù)據(jù)。

protected void pgrStudenLItemCommand(object sender,

RepeaterCommandEventArgs e)

{

bind();

}

編寫rptStudenLItemCommand事件代碼,實現(xiàn)刪除功能。

protected void rptStudenLItemCommand(object source,

RepeaterCommandEventArgs e)

{

if(e.CommandName=="Del")

{

using(SqlConnection cn=new SqlConnection(cns))

{

string sql="delete student where sid=@sid":

SqlCommand cm=new SqlCommand(sql,cn);

SqlParameter[]para=

{

new SqlParameterf"@sid",

e.CommandArgument.ToString()

};

cm.Parameters.AddRange(para);

cn.Open();

cm.ExecuteNonQuery();

calcRecordCount();

pgrStudent.Refresh();

bind();

}

}

}

插入功能的寫法與刪除功能的寫法相類似,這里不再舉例。

3.2.3運行效果

運行效果如圖6所示。

刪除數(shù)據(jù)時,如果將最后一頁的數(shù)據(jù)全部刪除,總頁數(shù)會自動減1。

3.2.4通過Url地址切換頁碼

在實際應(yīng)用中,有時希望通過Url地址切換頁碼,如輸入“http://網(wǎng)址?Page=10”可以直接跳轉(zhuǎn)到第10頁。

如果希望實現(xiàn)這樣的效果,需要將代碼進(jìn)行少量修改。

Load事件代碼:在pgrStudent.Refresh0;前面增加一條語句:pgrStudent.PageFromUrl();

pgrStudent_ItemCommand事件代碼:將bind0;刪除,改為:pgrStudent.PageToUrl();

rptStudenLItemCommand事件代碼:將最后三條語句刪除,改為:pgrStudent.PageToUrl();

4總結(jié)

本文詳細(xì)介紹了自定義分頁導(dǎo)航控件的設(shè)計過程,巧妙利用Repeater控件的數(shù)據(jù)綁定功能,動態(tài)實現(xiàn)生成分頁導(dǎo)航功能??丶刹捎肞ostBack方式進(jìn)行分頁,也可通過Url地址進(jìn)行頁面切換。使用自定義分頁導(dǎo)航控件,用戶只需要考慮如何顯示顯示和控制數(shù)據(jù),而分頁功能寫少量代碼和設(shè)置少量屬性就可實現(xiàn)。用戶還可以通過修改自定義控件,擴(kuò)充所需功能,如轉(zhuǎn)到某某頁功能,增加少量代碼就可實現(xiàn)。

宣武区| 古蔺县| 方山县| 武强县| 叶城县| 新野县| 海伦市| 汉源县| 太和县| 纳雍县| 台南市| 南通市| 蒙阴县| 南投市| 巨鹿县| 南岸区| 吉首市| 德州市| 金溪县| 镇平县| 安化县| 长岛县| 余江县| 武乡县| 涿州市| 贵州省| 麻江县| 长泰县| 溧水县| 伊宁县| 炎陵县| 武山县| 昌江| 遂川县| 玉林市| 新宾| 奈曼旗| 宣汉县| 合川市| 武陟县| 泽州县|