<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:42:19
        文檔

        asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼

        asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼:一、概述 在web開發(fā)中,常常需要顯示一些數(shù)據(jù),而為了方便排版及瀏覽,我們只需要顯示所有記錄中的一部分。一般情況下,我們采用分頁來實(shí)現(xiàn)這個(gè)需求。實(shí)現(xiàn)分頁的方法多種多樣,在本文中,我們采用了一個(gè)分頁空間來記錄記錄總數(shù)、當(dāng)前頁、總頁數(shù)及頁面大小等。
        推薦度:
        導(dǎo)讀asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼:一、概述 在web開發(fā)中,常常需要顯示一些數(shù)據(jù),而為了方便排版及瀏覽,我們只需要顯示所有記錄中的一部分。一般情況下,我們采用分頁來實(shí)現(xiàn)這個(gè)需求。實(shí)現(xiàn)分頁的方法多種多樣,在本文中,我們采用了一個(gè)分頁空間來記錄記錄總數(shù)、當(dāng)前頁、總頁數(shù)及頁面大小等。

        一、概述

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


        二、實(shí)現(xiàn)方案

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

        三、分頁控件的實(shí)現(xiàn)

        1)、新建一個(gè)ASP.NET Server Control項(xiàng)目,
        2)、在該項(xiàng)目中添加一個(gè)ASP.NET Server Control的Item,并設(shè)置其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
        分頁控件主要包括頁面大小、當(dāng)前頁、總記錄數(shù)及總頁數(shù)等屬性,并需要保存在ViewState中,詳細(xì)代碼如下所示:
        代碼如下:

        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()方法,詳細(xì)代碼如下所示:
        代碼如下:

        protected override void CreateChildControls()
        {
        Controls.Clear();
        lblMessage = new Label();
        lblMessage.Text = "當(dāng)前第" + CurPage + "頁 共" + PageCount + "頁  共" + 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步完成后,所有定義的控件都會(huì)順序顯示到頁面上了,但是這樣的效果不友好,如果對于多行的空間更是如此,所有我們需要定義控件的布局,自定義控件的布局需要重寫RenderContents()方法及TagKey屬性,此示例中的代碼如下所示:
        代碼如下:

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

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

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

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

        public event PageOnEventHandler RecPageChanged;

        最后,重寫冒泡事件,并根據(jù)參數(shù)特征,捕獲需要處理的事件,使其調(diào)用需要的方法。
        代碼如下:

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

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

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

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

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

        控件的詳細(xì)代碼如下:

        代碼如下:

        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 = "當(dāng)前第" + CurPage + "頁 共" + PageCount + "頁  共" + 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("  ");
        lblMessage.RenderControl(output);
        output.RenderEndTag();
        output.AddStyleAttribute("text-align", "right");
        output.RenderBeginTag(HtmlTextWriterTag.Td);
        btnFirst.RenderControl(output);
        output.Write("  ");
        btnPrev.RenderControl(output);
        output.Write("  ");
        btnNext.RenderControl(output);
        output.Write("  ");
        btnLast.RenderControl(output);
        output.Write("到");
        output.AddStyleAttribute(HtmlTextWriterStyle.Width, "30px");
        txtGoPage.RenderControl(output);
        output.Write("頁");
        btnGo.RenderControl(output);
        output.Write("  ");
        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,完成

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼

        asp.net中使用自定義控件的方式實(shí)現(xiàn)一個(gè)分頁控件的代碼:一、概述 在web開發(fā)中,常常需要顯示一些數(shù)據(jù),而為了方便排版及瀏覽,我們只需要顯示所有記錄中的一部分。一般情況下,我們采用分頁來實(shí)現(xiàn)這個(gè)需求。實(shí)現(xiàn)分頁的方法多種多樣,在本文中,我們采用了一個(gè)分頁空間來記錄記錄總數(shù)、當(dāng)前頁、總頁數(shù)及頁面大小等。
        推薦度:
        標(biāo)簽: 代碼 的代碼 控件
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久香蕉国产线看观看亚洲片| 亚洲高清无码专区视频| 亚洲视频在线观看地址| 国产成人免费ā片在线观看老同学 | 青青青国产在线观看免费| 亚洲国产国产综合一区首页| 久草免费福利资源站| 日产亚洲一区二区三区| 18国产精品白浆在线观看免费 | 久久久久亚洲av无码专区喷水| 国产午夜成人免费看片无遮挡| 亚洲av综合av一区| 少妇无码一区二区三区免费| 亚洲最大福利视频网站| 日本h在线精品免费观看| 亚洲依依成人亚洲社区| 日本一道在线日本一道高清不卡免费| 国产精品亚洲综合一区在线观看 | 热久久精品免费视频| 免费的黄网站男人的天堂| 亚洲中文字幕在线第六区| 国产又粗又长又硬免费视频| 在线视频亚洲一区| 亚洲福利中文字幕在线网址| 两个人看的www免费| 亚洲av女电影网| 一个人免费高清在线观看| 国产精品亚洲天堂| 亚洲日产韩国一二三四区| 国产成人yy免费视频| 亚洲高清国产拍精品熟女| 久久亚洲欧洲国产综合| 无码专区AAAAAA免费视频| 亚洲精品人成网在线播放影院| 亚欧免费一级毛片| 国产亚洲精aa在线看| 亚洲伊人久久综合中文成人网| 99re视频精品全部免费| 最新亚洲人成无码网站| 亚洲国产精品va在线播放| 在线播放高清国语自产拍免费|