婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > asp.net中使用自定義控件的方式實現一個分頁控件的代碼

asp.net中使用自定義控件的方式實現一個分頁控件的代碼

熱門標簽:外呼系統用員工身份證 保山電話外呼管理系統怎么用 電話機器人廣告話術 東莞語音電銷機器人排名 蘇州銷售外呼系統預算 使用智能電話機器人違法嗎 太原外呼電銷機器人費用 朝陽市地圖標注 淘寶地圖標注如何做
一、概述

在web開發中,常常需要顯示一些數據,而為了方便排版及瀏覽,我們只需要顯示所有記錄中的一部分。一般情況下,我們采用分頁來實現這個需求。實現分頁的方法多種多樣,在本文中,我們采用了一個分頁空間來記錄記錄總數、當前頁、總頁數及頁面大小等。為了有一個直觀上的印象,先展示該控件運行后的效果,效果如下圖所示:


二、實現方案

為了實現該效果圖,在asp.net中,可以使用Custom Controls and User Controls兩種方式,User Controls的實現方式及其簡單,而且使用起來和平時使用Controls的方式差別極大,所以我們采用Custom Controls實現。
參考資料:Professional ASP.NET 2.0 Server Control and Component Development

三、分頁控件的實現

1)、新建一個ASP.NET Server Control項目,
2)、在該項目中添加一個ASP.NET Server Control的Item,并設置其Name為PageOn,
3)、修改該類繼承于CompositeControl類,并修改其Attribute為如下所示:

復制代碼 代碼如下:

[DefaultProperty("PageSize")]
[ToolboxData("{0}:PageOn runat=server Width=100%>/{0}:PageOn>")]
public class PageOn : CompositeControl

注:自定義控件必須繼承自Control或者其子類。
4)、 定義需要被組合的控件
復制代碼 代碼如下:

Label lblMessage;
LinkButton btnFirst;
LinkButton btnPrev;
LinkButton btnNext;
LinkButton btnLast;
TextBox txtGoPage;
Button btnGo;

5)、定義分頁控件需要用到的Proptery
分頁控件主要包括頁面大小、當前頁、總記錄數及總頁數等屬性,并需要保存在ViewState中,詳細代碼如下所示:
復制代碼 代碼如下:

public int RowCount
{
get
{
if (ViewState["m_rowCount"] == null || int.Parse(ViewState["m_rowCount"].ToString()) 0)
{
ViewState["m_rowCount"] = 0;
}
return int.Parse(ViewState["m_rowCount"].ToString());
}
set
{
if (value 0)
{
ViewState["m_rowCount"] = 0;
}
else
{
ViewState["m_rowCount"] = value;
}
this.RecreateChildControls();
}
}
public int CurPage
{
get
{
if (ViewState["m_curPage"] ==null || int.Parse(ViewState["m_curPage"].ToString()) 1)
{
ViewState["m_curPage"] = 1;
}
return int.Parse(ViewState["m_curPage"].ToString());
}
set
{
if (value 1)
{
ViewState["m_curPage"] = 1;
}
else if (value > PageCount)
{
ViewState["m_curPage"] = PageCount;
}
else
{
ViewState["m_curPage"] = value;
}
}
}
public int PageCount
{
get
{
return RowCount / PageSize + 1;
}
}
public int PageSize
{
get
{
if (ViewState["m_pageSize"] ==null || int.Parse(ViewState["m_pageSize"].ToString()) 1)
{
ViewState["m_pageSize"] = 15;
}
return int.Parse(ViewState["m_pageSize"].ToString());
}
set
{
if (value > 0)
{
ViewState["m_pageSize"] = value;
this.RecreateChildControls();
}
}
}

6)、生成自定義控件的子空間
生成自定義空間的子空間需要override基類Control中的CreateChildControls()方法,詳細代碼如下所示:
復制代碼 代碼如下:

protected override void CreateChildControls()
{
Controls.Clear();
lblMessage = new Label();
lblMessage.Text = "當前第" + CurPage + "頁nbsp;共" + PageCount + "頁 nbsp;共" + RowCount + "條記錄";
lblMessage.ID = "lblMessage";
Controls.Add(lblMessage);
btnFirst = new LinkButton();
btnFirst.Text = "首頁";
btnFirst.CommandName = "first";
btnFirst.ID = "btnFirst";
if (CurPage = 1)
{
btnFirst.Enabled = false;
}
Controls.Add(btnFirst);
btnPrev = new LinkButton();
btnPrev.Text = "上一頁";
btnPrev.CommandName = "prev";
btnPrev.ID = "btnPrev";
if (CurPage = 1)
{
btnPrev.Enabled = false;
}
Controls.Add(btnPrev);
btnNext = new LinkButton();
btnNext.Text = "下一頁";
btnNext.CommandName = "next";
btnNext.ID = "btnNext";
if (CurPage >= PageCount)
{
btnNext.Enabled = false;
}
Controls.Add(btnNext);
btnLast = new LinkButton();
btnLast.Text = "末頁";
btnLast.CommandName = "last";
btnLast.ID = "btnLast";
if (CurPage >= PageCount)
{
btnLast.Enabled = false;
}
Controls.Add(btnLast);
txtGoPage = new TextBox();
txtGoPage.TabIndex = 1;
txtGoPage.ID = "txtGoPage";
txtGoPage.Attributes.Add("onkeyup", @"this.value=this.value.replace(/\D/g,'')");
txtGoPage.Attributes.Add("onafterpaste", @"this.value=this.value.replace(/\D/g,'')");
Controls.Add(txtGoPage);
btnGo = new Button();
btnGo.TabIndex = 2;
btnGo.CommandName = "go";
btnGo.Text = "GO";
btnGo.ID="btnGO";
Controls.Add(btnGo);
Debug.WriteLine("ffffffffffffffffffffffffffffffffffffffffffffffffff");
base.CreateChildControls();
}

7)、定義自定義控件的布局
第6步完成后,所有定義的控件都會順序顯示到頁面上了,但是這樣的效果不友好,如果對于多行的空間更是如此,所有我們需要定義控件的布局,自定義控件的布局需要重寫RenderContents()方法及TagKey屬性,此示例中的代碼如下所示:
復制代碼 代碼如下:

protected override void RenderContents(HtmlTextWriter output)
{
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.AddStyleAttribute("text-align", "left");
output.RenderBeginTag(HtmlTextWriterTag.Td);
output.Write("nbsp;nbsp;");
lblMessage.RenderControl(output);
output.RenderEndTag();
output.AddStyleAttribute("text-align", "right");
output.RenderBeginTag(HtmlTextWriterTag.Td);
btnFirst.RenderControl(output);
output.Write("nbsp;nbsp;");
btnPrev.RenderControl(output);
output.Write("nbsp;nbsp;");
btnNext.RenderControl(output);
output.Write("nbsp;nbsp;");
btnLast.RenderControl(output);
output.Write("到");
output.AddStyleAttribute(HtmlTextWriterStyle.Width, "30px");
txtGoPage.RenderControl(output);
output.Write("頁");
btnGo.RenderControl(output);
output.Write("nbsp;nbsp;");
output.RenderEndTag();
output.RenderEndTag();
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Table;
}
}

上面的代碼中,我們使用Table來布局,也可以使用其它的布局方式,比如DIV+CSS。
8)、捕捉并處理控件的事件
到此以后,這些代碼已經可以生成文章開頭圖所顯示的效果,但是什么事情也做不了,不能響應該控件上的事件,所有還需要繼續實現該控件上的事件代碼,實現這些事件采用冒泡所有子控件的事件來實現。
首先,定義一個委托:
復制代碼 代碼如下:

public delegate void PageOnEventHandler(object sender, EventArgs args);

其次,定義基于該委托的事件:
復制代碼 代碼如下:

public event PageOnEventHandler RecPageChanged;

最后,重寫冒泡事件,并根據參數特征,捕獲需要處理的事件,使其調用需要的方法。
復制代碼 代碼如下:

protected override bool OnBubbleEvent(object source, EventArgs args)
{
bool handled = false;
CommandEventArgs cea = args as CommandEventArgs;
if(cea == null)
{
return handled;
}
switch (cea.CommandName)
{
case "first":
handled = true;
CurPage = 1;
break;
case "prev":
handled = true;
if (CurPage > 1)
{
CurPage--;
}
else
{
CurPage = 1;
}
break;
case "next":
handled = true;
if (CurPage PageCount)
{
CurPage ++ ;
}
else
{
CurPage = PageCount;
}
break;
case "last":
handled = true;
CurPage = PageCount;
break;
case "go":
string strGo = txtGoPage.Text.Trim();
int iGo;
if (!string.IsNullOrEmpty(strGo) int.TryParse(strGo, out iGo))
{
handled = true;
CurPage = iGo;
}
break;
}
if (handled)
{
if (this.RecPageChanged != null)
{
RecPageChanged(this, args);
this.RecreateChildControls();
}
return handled;
}
else
{
return base.OnBubbleEvent(source, args);
}
}

到此就完成了分頁控件的開發。

注:可以定制該控件的樣式,或者使用屬性暴露子控件的屬性來控制樣式等.
四、使用分頁控件
完成自定義控件的開發后,在Toolbox中Choose Items或者直接在需要使用該自定義控件的項目中引用該項目或者DLL,即可在Toolbox中顯示自定義控件了。然后用拖拽的方式即可把分頁控件放到需要的地方,就像使用button控件一樣簡單。
然后再該頁面的后臺代碼的OnLoad事件中,注冊需要被調用的方法到該控件的RecPageChanged事件中,如下所示:
復制代碼 代碼如下:

PageOn1.RecPageChanged += new CustomControl.PageOnEventHandler(PageOn1_RecPageChanged);

最后,只需要在方法PageOn1_RecPageChanged中編寫自己的代碼即可。
復制代碼 代碼如下:

void PageOn1_RecPageChanged(object sender, EventArgs args)
{
//To do something
}

控件的詳細代碼如下:
復制代碼 代碼如下:

namespace CustomControl
{
public delegate void PageOnEventHandler(object sender, EventArgs args);
[DefaultProperty("PageSize")]
[ToolboxData("{0}:PageOn runat=server Width=100%>/{0}:PageOn>")]
public class PageOn :CompositeControl
{
#region
Label lblMessage;
LinkButton btnFirst;
LinkButton btnPrev;
LinkButton btnNext;
LinkButton btnLast;
TextBox txtGoPage;
Button btnGo;
#endregion
protected override void CreateChildControls()
{
Controls.Clear();
lblMessage = new Label();
lblMessage.Text = "當前第" + CurPage + "頁nbsp;共" + PageCount + "頁 nbsp;共" + RowCount + "條記錄";
lblMessage.ID = "lblMessage";
Controls.Add(lblMessage);
btnFirst = new LinkButton();
btnFirst.Text = "首頁";
btnFirst.CommandName = "first";
btnFirst.ID = "btnFirst";
if (CurPage = 1)
{
btnFirst.Enabled = false;
}
Controls.Add(btnFirst);
btnPrev = new LinkButton();
btnPrev.Text = "上一頁";
btnPrev.CommandName = "prev";
btnPrev.ID = "btnPrev";
if (CurPage = 1)
{
btnPrev.Enabled = false;
}
Controls.Add(btnPrev);
btnNext = new LinkButton();
btnNext.Text = "下一頁";
btnNext.CommandName = "next";
btnNext.ID = "btnNext";
if (CurPage >= PageCount)
{
btnNext.Enabled = false;
}
Controls.Add(btnNext);
btnLast = new LinkButton();
btnLast.Text = "末頁";
btnLast.CommandName = "last";
btnLast.ID = "btnLast";
if (CurPage >= PageCount)
{
btnLast.Enabled = false;
}
Controls.Add(btnLast);
txtGoPage = new TextBox();
txtGoPage.TabIndex = 1;
txtGoPage.ID = "txtGoPage";
txtGoPage.Attributes.Add("onkeyup", @"this.value=this.value.replace(/\D/g,'')");
txtGoPage.Attributes.Add("onafterpaste", @"this.value=this.value.replace(/\D/g,'')");
Controls.Add(txtGoPage);
btnGo = new Button();
btnGo.TabIndex = 2;
btnGo.CommandName = "go";
btnGo.Text = "GO";
btnGo.ID="btnGO";
Controls.Add(btnGo);
Debug.WriteLine("ffffffffffffffffffffffffffffffffffffffffffffffffff");
base.CreateChildControls();
}
public int RowCount
{
get
{
if (ViewState["m_rowCount"] == null || int.Parse(ViewState["m_rowCount"].ToString()) 0)
{
ViewState["m_rowCount"] = 0;
}
return int.Parse(ViewState["m_rowCount"].ToString());
}
set
{
if (value 0)
{
ViewState["m_rowCount"] = 0;
}
else
{
ViewState["m_rowCount"] = value;
}
this.RecreateChildControls();
}
}
public int CurPage
{
get
{
if (ViewState["m_curPage"] ==null || int.Parse(ViewState["m_curPage"].ToString()) 1)
{
ViewState["m_curPage"] = 1;
}
return int.Parse(ViewState["m_curPage"].ToString());
}
set
{
if (value 1)
{
ViewState["m_curPage"] = 1;
}
else if (value > PageCount)
{
ViewState["m_curPage"] = PageCount;
}
else
{
ViewState["m_curPage"] = value;
}
}
}
public int PageCount
{
get
{
return RowCount / PageSize + 1;
}
}
public int PageSize
{
get
{
if (ViewState["m_pageSize"] ==null || int.Parse(ViewState["m_pageSize"].ToString()) 1)
{
ViewState["m_pageSize"] = 15;
}
return int.Parse(ViewState["m_pageSize"].ToString());
}
set
{
if (value > 0)
{
ViewState["m_pageSize"] = value;
this.RecreateChildControls();
}
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.AddStyleAttribute("text-align", "left");
output.RenderBeginTag(HtmlTextWriterTag.Td);
output.Write("nbsp;nbsp;");
lblMessage.RenderControl(output);
output.RenderEndTag();
output.AddStyleAttribute("text-align", "right");
output.RenderBeginTag(HtmlTextWriterTag.Td);
btnFirst.RenderControl(output);
output.Write("nbsp;nbsp;");
btnPrev.RenderControl(output);
output.Write("nbsp;nbsp;");
btnNext.RenderControl(output);
output.Write("nbsp;nbsp;");
btnLast.RenderControl(output);
output.Write("到");
output.AddStyleAttribute(HtmlTextWriterStyle.Width, "30px");
txtGoPage.RenderControl(output);
output.Write("頁");
btnGo.RenderControl(output);
output.Write("nbsp;nbsp;");
output.RenderEndTag();
output.RenderEndTag();
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Table;
}
}
public event PageOnEventHandler RecPageChanged;
protected override bool OnBubbleEvent(object source, EventArgs args)
{
bool handled = false;
CommandEventArgs cea = args as CommandEventArgs;
if(cea == null)
{
return handled;
}
switch (cea.CommandName)
{
case "first":
handled = true;
CurPage = 1;
break;
case "prev":
handled = true;
if (CurPage > 1)
{
CurPage--;
}
else
{
CurPage = 1;
}
break;
case "next":
handled = true;
if (CurPage PageCount)
{
CurPage ++ ;
}
else
{
CurPage = PageCount;
}
break;
case "last":
handled = true;
CurPage = PageCount;
break;
case "go":
string strGo = txtGoPage.Text.Trim();
int iGo;
if (!string.IsNullOrEmpty(strGo) int.TryParse(strGo, out iGo))
{
handled = true;
CurPage = iGo;
}
break;
}
if (handled)
{
if (this.RecPageChanged != null)
{
RecPageChanged(this, args);
this.RecreateChildControls();
}
return handled;
}
else
{
return base.OnBubbleEvent(source, args);
}
}
}
}

OK,完成
您可能感興趣的文章:
  • asp.net webform自定義分頁控件
  • asp.net分頁控件使用詳解【附實例下載】
  • 解析asp.net的分頁控件
  • asp.net自定義分頁控件示例
  • 關于asp.net 自定義分頁控件
  • 分享一個asp.net pager分頁控件
  • asp.net分頁控件AspNetPager的樣式美化
  • asp.net下Repeater使用 AspNetPager分頁控件
  • AspNetAjaxPager,Asp.Net通用無刷新Ajax分頁控件,支持多樣式多數據綁定
  • asp.net web頁面自定義分頁控件使用詳解

標簽:洛陽 潛江 克拉瑪依 綏化 西藏 阿里 運城 呼倫貝爾

巨人網絡通訊聲明:本文標題《asp.net中使用自定義控件的方式實現一個分頁控件的代碼》,本文關鍵詞  asp.net,中,使用,自定義,控件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《asp.net中使用自定義控件的方式實現一個分頁控件的代碼》相關的同類信息!
  • 本頁收集關于asp.net中使用自定義控件的方式實現一個分頁控件的代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美综合另类在线卡通| 欧美色图一区二区三区| 日韩高清国产一区在线| 午夜久久久久久电影| 偷拍与自拍一区| 人人超碰91尤物精品国产| 天堂成人免费av电影一区| 天天影视色香欲综合网老头| 日韩福利视频网| 精品一区二区久久| 成人综合在线网站| 成人动漫一区二区三区| 色哟哟在线观看一区二区三区| 色综合久久六月婷婷中文字幕| 91福利在线观看| 91麻豆精品国产综合久久久久久| 日韩三级视频在线观看| 久久综合九色欧美综合狠狠| 欧美激情一区在线| 亚洲一区影音先锋| 精品一区二区三区久久久| 国产麻豆精品在线| 91污在线观看| 日韩一区二区在线看| 欧美国产精品v| 亚洲一区在线观看免费| 国产一区二区视频在线| 色乱码一区二区三区88| 日韩欧美视频一区| 椎名由奈av一区二区三区| 亚洲第一在线综合网站| 国产在线精品不卡| 欧美性videosxxxxx| 国产人妖乱国产精品人妖| 亚洲亚洲人成综合网络| 国产一区二区主播在线| 欧美性猛片aaaaaaa做受| 欧美精品一区在线观看| 亚洲国产精品一区二区尤物区| 激情综合亚洲精品| 日本福利一区二区| 国产三级精品三级| 五月开心婷婷久久| 91国产福利在线| 国产婷婷一区二区| 五月天激情综合| 91久久线看在观草草青青| 久久久777精品电影网影网| 日韩av网站在线观看| 91视频.com| 国产精品午夜久久| 国产精品综合一区二区三区| 91精品国产手机| 亚洲国产sm捆绑调教视频| 成人国产免费视频| 国产欧美久久久精品影院| 久久精品国产99久久6| 在线成人小视频| 亚洲国产精品麻豆| 欧美性做爰猛烈叫床潮| 亚洲三级小视频| 91视频在线观看免费| 亚洲欧洲无码一区二区三区| 国产乱码一区二区三区| 久久蜜桃av一区二区天堂 | 国产乱人伦偷精品视频免下载| 欧美精品乱码久久久久久按摩 | 毛片av中文字幕一区二区| 在线观看日韩高清av| 亚洲视频一二三| 91美女福利视频| 亚洲黄色性网站| 欧美中文字幕亚洲一区二区va在线| 国产精品高潮久久久久无| 懂色av一区二区在线播放| 欧美极品美女视频| 成人免费三级在线| 国产精品久99| 欧美系列一区二区| 男男gaygay亚洲| 国产成人亚洲综合色影视| av成人免费在线观看| 9人人澡人人爽人人精品| 日本道在线观看一区二区| 亚洲欧美电影院| 欧洲精品中文字幕| 亚洲福利一二三区| 欧美高清视频一二三区| 婷婷久久综合九色国产成人| 欧美大白屁股肥臀xxxxxx| 韩日精品视频一区| 日韩美女久久久| 欧美一区二区视频免费观看| 国产精品一区二区久久不卡 | 精品精品国产高清一毛片一天堂| 久久精品国产久精国产| 欧美激情资源网| 在线欧美日韩国产| 久久国产成人午夜av影院| 国产精品美女久久福利网站| 日本韩国一区二区三区| 91精品国产欧美一区二区| 亚洲精品成人a在线观看| 欧美精品第1页| 国产91丝袜在线18| 亚洲女人****多毛耸耸8| 日韩一级高清毛片| jizzjizzjizz欧美| 蜜桃久久av一区| 日韩理论片在线| 欧美成人午夜电影| 欧美在线观看一区二区| 成人丝袜高跟foot| 日韩精品乱码av一区二区| 国产精品美女久久久久aⅴ| 91精品国产91久久综合桃花 | 国产一区高清在线| 国产精品久久久久永久免费观看| 欧美体内she精高潮| 国产一区二三区| 奇米精品一区二区三区在线观看一| 国产婷婷色一区二区三区| 色天天综合久久久久综合片| 另类调教123区| 夜色激情一区二区| 国产精品视频观看| 26uuu亚洲综合色| 欧美蜜桃一区二区三区| 99re66热这里只有精品3直播| 夜夜嗨av一区二区三区四季av| 国产亚洲精品7777| 日韩一区二区在线免费观看| 在线免费不卡视频| 北条麻妃一区二区三区| 国产99久久久国产精品免费看| 久久精品国产网站| 日韩中文字幕区一区有砖一区| 亚洲视频一二区| 国产精品久久久久影院色老大| 国产婷婷色一区二区三区四区| 精品国产一区二区三区四区四 | 欧美激情一区不卡| 精品国产一区久久| 欧美成人r级一区二区三区| 欧美三级在线播放| 色呦呦国产精品| 91极品美女在线| 色综合天天综合色综合av| 成人黄色av电影| 91美女视频网站| 色综合久久久久久久| 91福利国产精品| 在线看一区二区| 欧美福利视频导航| 日韩欧美高清dvd碟片| 日韩精品中文字幕一区二区三区 | 天堂成人国产精品一区| 亚洲无线码一区二区三区| 一区二区成人在线观看| 亚洲不卡av一区二区三区| 午夜日韩在线电影| 日日骚欧美日韩| 久久99国内精品| 波波电影院一区二区三区| 欧美亚洲动漫另类| 日韩欧美国产一区在线观看| 精品美女在线播放| 国产精品久久久久影视| 18涩涩午夜精品.www| 午夜精品视频在线观看| 另类欧美日韩国产在线| 成人av网址在线| 欧美三区在线观看| 国产日产欧美精品一区二区三区| 中文字幕一区二区在线播放| 偷拍一区二区三区| 国产精品99久久不卡二区| 欧美伊人久久久久久久久影院| 欧美一级高清片| 国产精品三级久久久久三级| 亚洲成av人片| 18欧美亚洲精品| 日本一道高清亚洲日美韩| 久久精品99久久久| 色偷偷久久人人79超碰人人澡| 欧美日本在线看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩一区和二区| 综合欧美一区二区三区| 午夜免费欧美电影| 99久久综合99久久综合网站| 欧美三片在线视频观看| 国产欧美一区二区三区鸳鸯浴| 一区二区免费在线播放| 裸体健美xxxx欧美裸体表演| 99精品国产视频| 国产女人18水真多18精品一级做| 亚洲不卡av一区二区三区| 99久久免费精品高清特色大片| 日韩欧美综合一区|