简单的分页控件
簡單的分頁控件 能分頁(廢話) 能夠在禁用viewstate的情況下也可以正常使用 代碼簡單 不修改地址欄
?1<asp:Panel?ID="PageDiv"?CssClass="SplitPage"?runat="server"?Width="100%"?HorizontalAlign="Right">
?2????<asp:LinkButton?ID="lkbtnFirst"?runat="server"?OnClick="lkbtnFirst_Click">首頁</asp:LinkButton>
?3????<asp:LinkButton?ID="lkbtnPre"?runat="server"?OnClick="lkbtnPre_Click">上一頁</asp:LinkButton>
?4????<asp:Literal?runat="server"?ID="lbPageNum"></asp:Literal>
?5????<asp:TextBox?ID="tbPageNum"?runat="server"?Style="display:?none;"></asp:TextBox>
?6????<asp:Button?ID="btnSplitPostBack"?runat="server"?OnClick="btnSplitPostBack_Click"?Style="display:?none;"?UseSubmitBehavior="false"?/>
?7????<asp:LinkButton?ID="lkbtnNext"?runat="server"?OnClick="lkbtnNext_Click">下一頁</asp:LinkButton>
?8????<asp:LinkButton?ID="lkbtnLast"?runat="server"?OnClick="lkbtnLast_Click">末頁</asp:LinkButton>
?9????<asp:Literal?ID="ltSplitPageInfo"?runat="server"></asp:Literal>
10????<asp:TextBox?ID="tbCurrentPageNum"?runat="server"?Style="display:?none;"></asp:TextBox>
11</asp:Panel>
??1public?partial?class?SplitPage?:?System.Web.UI.UserControl
??2{
??3????/**////?<summary>
??4????????///?分頁事件
??5?????????///?</summary>
??6????????///?<param?name="sender">SplitPageControl對象</param>
??7????????///?<param?name="e">分頁參數</param>
??8????????///?<returns></returns>
??9????????[Description("分頁")]
?10????????public?event?EventHandler<SplitEventArgs>?SplitPaging(object?sender?,SplitEventArgs?e);
?11
?12????????/**////?<summary>
?13????????///?頁碼鏈接
?14?????????///?</summary>
?15????????private?static?string?pageNumLinkString?=?" <a?href=\"javascript:document.getElementById('{0}').value={1};__doPostBack('{2}','');\"?class=\"SplitPageLink\">{1}</a>";
?16
?17????????/**////?<summary>
?18????????///?每頁顯示紀錄數
?19?????????///?</summary>
?20????????public?int?PerPageShowCount
?21????????{
?22????????????get
?23????????????{
?24????????????????object?obj?=?ViewState["perPageShowCount"];
?25????????????????if?(obj?==?null)
?26????????????????????return?10;
?27????????????????return?(int)obj;
?28????????????}
?29????????????set
?30????????????{
?31????????????????if?(value?<?0)
?32????????????????????value?=?10;
?33????????????????ViewState["perPageShowCount"]?=?value;
?34????????????}
?35????????}
?36
?37????????/**////?<summary>
?38????????///?設置或獲取當前記錄的頁碼位置
?39?????????///?</summary>
?40????????public?int?PageNum
?41????????{
?42????????????get
?43????????????{
?44????????????????return?int.Parse(tbCurrentPageNum.Text);
?45????????????}
?46????????????set
?47????????????{
?48????????????????if?(value?<?0)
?49????????????????????value?=?0;
?50????????????????tbCurrentPageNum.Text?=?value.ToString();
?51????????????}
?52????????}
?53
?54????????/**////?<summary>
?55????????///?設置或獲取當前記錄的總頁碼數
?56????????///?</summary>
?57????????public?int?MaxPageNum
?58????????{
?59????????????get
?60????????????{
?61????????????????object?obj?=?ViewState["MaxPageNum"];
?62????????????????if?(obj?==?null)
?63????????????????????return?1;
?64????????????????return?(int)obj;
?65????????????}
?66????????????set
?67????????????{
?68????????????????if?(value?<=?0)
?69????????????????????value?=?1;
?70????????????????ViewState["MaxPageNum"]?=?value;
?71????????????}
?72????????}
?73
?74????????/**////?<summary>
?75????????///?設置或獲取是否顯示頁碼
?76????????///?</summary>
?77????????public?bool?ShowPageNum
?78????????{
?79????????????get
?80????????????{
?81????????????????object?obj?=?ViewState["ShowPageNum"];
?82????????????????if?(obj?==?null)
?83????????????????????return?false;
?84????????????????return?(bool)obj;
?85????????????}
?86????????????set
?87????????????{
?88????????????????ViewState["ShowPageNum"]?=?value;
?89????????????}
?90????????}
?91
?92????????/**////?<summary>
?93????????///?內部使用分頁
?94????????///?</summary>
?95????????///?<param?name="currentPage">當前頁碼</param>
?96????????///?<param?name="perPageShowCount">每頁顯示多少條頁碼</param>
?97????????private?void?SetSplitPage(int?currentPage,?int?perPageShowCount)
?98????????{
?99????????????OnSplitPaging(new?SplitEventArgs(currentPage,?perPageShowCount));
100????????}
101
102????????/**////?<summary>
103????????///?引發分頁事件
104????????///?</summary>
105????????///?<param?name="loadDataInfo">加載數據用函數</param>
106????????protected?virtual?void?OnSplitPaging(SplitEventArgs?e)
107????????{
108????????????if?(SplitPaging?!=?null)
109????????????????SplitPaging(this,?e);
110????????}
111
112????????/**////?<summary>
113????????///?分頁控制
114????????///?</summary>
115????????///?<param?name="pageNum">當前頁碼</param>
116????????///?<param?name="sp">分頁對象</param>
117????????public?void?SetSplitPageInfo(int?currentPageNum,?int?PageCount)
118????????{
119????????????PageNum?=?currentPageNum;
120????????????MaxPageNum?=?PageCount;
121????????????ltSplitPageInfo.Text?=?string.Format("第{0}頁,共{1}頁,每頁{2}行",?(PageNum?+?1),?MaxPageNum,?PerPageShowCount);
122????????????if?(MaxPageNum?>?1)//頁碼多余一頁?分頁控制判斷
123????????????{
124????????????????if?(PageNum?==?0)//在首頁
125????????????????{
126????????????????????lkbtnFirst.Enabled?=?false;
127????????????????????lkbtnLast.Enabled?=?true;
128????????????????????lkbtnNext.Enabled?=?true;
129????????????????????lkbtnPre.Enabled?=?false;
130????????????????}
131????????????????else?if?(PageNum?==?(MaxPageNum?-?1))//在末頁
132????????????????{
133????????????????????lkbtnFirst.Enabled?=?true;
134????????????????????lkbtnLast.Enabled?=?false;
135????????????????????lkbtnNext.Enabled?=?false;
136????????????????????lkbtnPre.Enabled?=?true;
137????????????????}
138????????????????else?if?(PageNum?>?(MaxPageNum?-?1))//當前頁大于頁碼總數
139????????????????{
140????????????????????lkbtnFirst.Enabled?=?false;
141????????????????????lkbtnLast.Enabled?=?false;
142????????????????????lkbtnNext.Enabled?=?false;
143????????????????????lkbtnPre.Enabled?=?false;
144????????????????}
145????????????????else//在其他頁碼
146????????????????{
147????????????????????lkbtnFirst.Enabled?=?true;
148????????????????????lkbtnLast.Enabled?=?true;
149????????????????????lkbtnNext.Enabled?=?true;
150????????????????????lkbtnPre.Enabled?=?true;
151????????????????}
152????????????}
153????????????else//只有一頁
154????????????{
155????????????????lkbtnFirst.Enabled?=?false;
156????????????????lkbtnLast.Enabled?=?false;
157????????????????lkbtnNext.Enabled?=?false;
158????????????????lkbtnPre.Enabled?=?false;
159????????????}
160
161????????????if?(ShowPageNum)
162????????????{
163????????????????StringBuilder?sb?=?new?StringBuilder();
164
165????????????????//定義要顯示的頁碼最大于最小值
166????????????????int?pageStart?=?Math.Max(pageNum?-?3,?Math.Min(MaxPageNum?-?8,?1));
167????????????????int?pageEnd?=?Math.Min(MaxPageNum,?pageStart?+?8);
168????????????????pageStart?=?(pageEnd?-?8?>?0)???(pageEnd?-?8)?:?1;
169
170????????????????for?(int?i?=?pageStart;?i?<=?PageNum;?i++)
171????????????????{
172????????????????????sb.AppendFormat(pageNumLinkString,?tbPageNum.ClientID,?i,?btnSplitPostBack.ClientID.Replace('_',?'$'));
173????????????????}
174????????????????sb.AppendFormat("{0}",?PageNum?+?1);
175????????????????for?(int?i?=?PageNum?+?2;?i?<=?pageEnd;?i++)
176????????????????{
177????????????????????sb.AppendFormat(pageNumLinkString,?tbPageNum.ClientID,?i,?btnSplitPostBack.ClientID.Replace('_',?'$'));
178????????????????}
179
180????????????????lbPageNum.Text?=?sb.ToString();
181????????????}
182????????}
183
184????????/**////?<summary>
185????????///??首頁
186????????///?</summary>
187????????///?<param?name="sender"></param>
188????????///?<param?name="e"></param>
189????????protected?void?lkbtnFirst_Click(object?sender,?EventArgs?e)
190????????{
191????????????SetSplitPage(0,?PerPageShowCount);
192????????}
193
194????????/**////?<summary>
195????????///?上一頁
196????????///?</summary>
197????????///?<param?name="sender"></param>
198????????///?<param?name="e"></param>
199????????protected?void?lkbtnPre_Click(object?sender,?EventArgs?e)
200????????{
201????????????SetSplitPage(PageNum?-?1,?PerPageShowCount);
202????????}
203????????/**////?<summary>
204????????///?下一頁
205????????///?</summary>
206????????///?<param?name="sender"></param>
207????????///?<param?name="e"></param>
208????????protected?void?lkbtnNext_Click(object?sender,?EventArgs?e)
209????????{
210????????????SetSplitPage(PageNum?+?1,?PerPageShowCount);
211????????}
212????????/**////?<summary>
213????????///?末頁
214????????///?</summary>
215????????///?<param?name="sender"></param>
216????????///?<param?name="e"></param>
217????????protected?void?lkbtnLast_Click(object?sender,?EventArgs?e)
218????????{
219????????????SetSplitPage(MaxPageNum?-?1,?PerPageShowCount);
220????????}
221
222????????/**////?<summary>
223????????///?提交信息
224????????///?</summary>
225????????///?<param?name="sender"></param>
226????????///?<param?name="e"></param>
227????????protected?void?btnSplitPostBack_Click(object?sender,?EventArgs?e)
228????????{
229????????????SetSplitPage(int.Parse(tbPageNum.Text)?-?1,?PerPageShowCount);
230????????}
231}
232
使用的時候,把這個放到頁面中,在頁面的Page_load事件中加載事件中就可以了
調用代碼
?1protected?void?Page_Load(object?sender,?EventArgs?e)
?2????????{
?3????????????SplitPage1.SplitPaging?+=?new?EventHandler<SplitEventArgs>(SplitPage1_SplitPaging);
?4????????}
?5//頁面回調事件
?6void?SplitPage1_SplitPaging(object?sender,?WebSite.Admin.Control.SplitEventArgs?e)
?7????????{
?8????????????LoadDataInfo(e.CurrentPage,?e.PerPageShowCount);
?9????????????//設置分頁相關信息
10????????????SplitPage1.SetSplitPageInfo(newPageNum,?PageCount);
11????????}
中國特色沒有代碼下載。 posted on 2008-06-16 16:44 艾飛 閱讀(...) 評論(...) 編輯 收藏
常看圓子里面的網友說分頁控件。也有很多人在網上找一個好用的分頁控件。我把自己做的放一個上來給大家吧。其實東西蠻簡單的,看懂了思路就可以動手寫一個了。
廢話不多說。先表明需求:
要達到需求中的第2和第4條就需要一些輔助對象。因為不使用viewstate那么就需要使用能夠保存當前頁面的對象,TextBox、Literal和Label都可以實現。為了簡化控件里面的控件對象,特別是頁碼對象,則使用直接Html代碼的方式,通過a標簽中的href屬性對頁碼的文本框內容修改,然后引發postback以把分頁結果返回到服務器端,具體實現偷了懶,直接用了 pageNumLinkString? 變量。其實“首頁”、“上一頁”、“下一頁”和“末頁”也可以用同樣的思路來實現。單修改就可以增加跳轉到某頁的功能(把倆個控件的style屬性去了就可以了)。
分頁的用戶控件的頁面代碼:
?1<asp:Panel?ID="PageDiv"?CssClass="SplitPage"?runat="server"?Width="100%"?HorizontalAlign="Right">
?2????<asp:LinkButton?ID="lkbtnFirst"?runat="server"?OnClick="lkbtnFirst_Click">首頁</asp:LinkButton>
?3????<asp:LinkButton?ID="lkbtnPre"?runat="server"?OnClick="lkbtnPre_Click">上一頁</asp:LinkButton>
?4????<asp:Literal?runat="server"?ID="lbPageNum"></asp:Literal>
?5????<asp:TextBox?ID="tbPageNum"?runat="server"?Style="display:?none;"></asp:TextBox>
?6????<asp:Button?ID="btnSplitPostBack"?runat="server"?OnClick="btnSplitPostBack_Click"?Style="display:?none;"?UseSubmitBehavior="false"?/>
?7????<asp:LinkButton?ID="lkbtnNext"?runat="server"?OnClick="lkbtnNext_Click">下一頁</asp:LinkButton>
?8????<asp:LinkButton?ID="lkbtnLast"?runat="server"?OnClick="lkbtnLast_Click">末頁</asp:LinkButton>
?9????<asp:Literal?ID="ltSplitPageInfo"?runat="server"></asp:Literal>
10????<asp:TextBox?ID="tbCurrentPageNum"?runat="server"?Style="display:?none;"></asp:TextBox>
11</asp:Panel>
對應代碼頁代碼:
頁面代碼??1public?partial?class?SplitPage?:?System.Web.UI.UserControl
??2{
??3????/**////?<summary>
??4????????///?分頁事件
??5?????????///?</summary>
??6????????///?<param?name="sender">SplitPageControl對象</param>
??7????????///?<param?name="e">分頁參數</param>
??8????????///?<returns></returns>
??9????????[Description("分頁")]
?10????????public?event?EventHandler<SplitEventArgs>?SplitPaging(object?sender?,SplitEventArgs?e);
?11
?12????????/**////?<summary>
?13????????///?頁碼鏈接
?14?????????///?</summary>
?15????????private?static?string?pageNumLinkString?=?" <a?href=\"javascript:document.getElementById('{0}').value={1};__doPostBack('{2}','');\"?class=\"SplitPageLink\">{1}</a>";
?16
?17????????/**////?<summary>
?18????????///?每頁顯示紀錄數
?19?????????///?</summary>
?20????????public?int?PerPageShowCount
?21????????{
?22????????????get
?23????????????{
?24????????????????object?obj?=?ViewState["perPageShowCount"];
?25????????????????if?(obj?==?null)
?26????????????????????return?10;
?27????????????????return?(int)obj;
?28????????????}
?29????????????set
?30????????????{
?31????????????????if?(value?<?0)
?32????????????????????value?=?10;
?33????????????????ViewState["perPageShowCount"]?=?value;
?34????????????}
?35????????}
?36
?37????????/**////?<summary>
?38????????///?設置或獲取當前記錄的頁碼位置
?39?????????///?</summary>
?40????????public?int?PageNum
?41????????{
?42????????????get
?43????????????{
?44????????????????return?int.Parse(tbCurrentPageNum.Text);
?45????????????}
?46????????????set
?47????????????{
?48????????????????if?(value?<?0)
?49????????????????????value?=?0;
?50????????????????tbCurrentPageNum.Text?=?value.ToString();
?51????????????}
?52????????}
?53
?54????????/**////?<summary>
?55????????///?設置或獲取當前記錄的總頁碼數
?56????????///?</summary>
?57????????public?int?MaxPageNum
?58????????{
?59????????????get
?60????????????{
?61????????????????object?obj?=?ViewState["MaxPageNum"];
?62????????????????if?(obj?==?null)
?63????????????????????return?1;
?64????????????????return?(int)obj;
?65????????????}
?66????????????set
?67????????????{
?68????????????????if?(value?<=?0)
?69????????????????????value?=?1;
?70????????????????ViewState["MaxPageNum"]?=?value;
?71????????????}
?72????????}
?73
?74????????/**////?<summary>
?75????????///?設置或獲取是否顯示頁碼
?76????????///?</summary>
?77????????public?bool?ShowPageNum
?78????????{
?79????????????get
?80????????????{
?81????????????????object?obj?=?ViewState["ShowPageNum"];
?82????????????????if?(obj?==?null)
?83????????????????????return?false;
?84????????????????return?(bool)obj;
?85????????????}
?86????????????set
?87????????????{
?88????????????????ViewState["ShowPageNum"]?=?value;
?89????????????}
?90????????}
?91
?92????????/**////?<summary>
?93????????///?內部使用分頁
?94????????///?</summary>
?95????????///?<param?name="currentPage">當前頁碼</param>
?96????????///?<param?name="perPageShowCount">每頁顯示多少條頁碼</param>
?97????????private?void?SetSplitPage(int?currentPage,?int?perPageShowCount)
?98????????{
?99????????????OnSplitPaging(new?SplitEventArgs(currentPage,?perPageShowCount));
100????????}
101
102????????/**////?<summary>
103????????///?引發分頁事件
104????????///?</summary>
105????????///?<param?name="loadDataInfo">加載數據用函數</param>
106????????protected?virtual?void?OnSplitPaging(SplitEventArgs?e)
107????????{
108????????????if?(SplitPaging?!=?null)
109????????????????SplitPaging(this,?e);
110????????}
111
112????????/**////?<summary>
113????????///?分頁控制
114????????///?</summary>
115????????///?<param?name="pageNum">當前頁碼</param>
116????????///?<param?name="sp">分頁對象</param>
117????????public?void?SetSplitPageInfo(int?currentPageNum,?int?PageCount)
118????????{
119????????????PageNum?=?currentPageNum;
120????????????MaxPageNum?=?PageCount;
121????????????ltSplitPageInfo.Text?=?string.Format("第{0}頁,共{1}頁,每頁{2}行",?(PageNum?+?1),?MaxPageNum,?PerPageShowCount);
122????????????if?(MaxPageNum?>?1)//頁碼多余一頁?分頁控制判斷
123????????????{
124????????????????if?(PageNum?==?0)//在首頁
125????????????????{
126????????????????????lkbtnFirst.Enabled?=?false;
127????????????????????lkbtnLast.Enabled?=?true;
128????????????????????lkbtnNext.Enabled?=?true;
129????????????????????lkbtnPre.Enabled?=?false;
130????????????????}
131????????????????else?if?(PageNum?==?(MaxPageNum?-?1))//在末頁
132????????????????{
133????????????????????lkbtnFirst.Enabled?=?true;
134????????????????????lkbtnLast.Enabled?=?false;
135????????????????????lkbtnNext.Enabled?=?false;
136????????????????????lkbtnPre.Enabled?=?true;
137????????????????}
138????????????????else?if?(PageNum?>?(MaxPageNum?-?1))//當前頁大于頁碼總數
139????????????????{
140????????????????????lkbtnFirst.Enabled?=?false;
141????????????????????lkbtnLast.Enabled?=?false;
142????????????????????lkbtnNext.Enabled?=?false;
143????????????????????lkbtnPre.Enabled?=?false;
144????????????????}
145????????????????else//在其他頁碼
146????????????????{
147????????????????????lkbtnFirst.Enabled?=?true;
148????????????????????lkbtnLast.Enabled?=?true;
149????????????????????lkbtnNext.Enabled?=?true;
150????????????????????lkbtnPre.Enabled?=?true;
151????????????????}
152????????????}
153????????????else//只有一頁
154????????????{
155????????????????lkbtnFirst.Enabled?=?false;
156????????????????lkbtnLast.Enabled?=?false;
157????????????????lkbtnNext.Enabled?=?false;
158????????????????lkbtnPre.Enabled?=?false;
159????????????}
160
161????????????if?(ShowPageNum)
162????????????{
163????????????????StringBuilder?sb?=?new?StringBuilder();
164
165????????????????//定義要顯示的頁碼最大于最小值
166????????????????int?pageStart?=?Math.Max(pageNum?-?3,?Math.Min(MaxPageNum?-?8,?1));
167????????????????int?pageEnd?=?Math.Min(MaxPageNum,?pageStart?+?8);
168????????????????pageStart?=?(pageEnd?-?8?>?0)???(pageEnd?-?8)?:?1;
169
170????????????????for?(int?i?=?pageStart;?i?<=?PageNum;?i++)
171????????????????{
172????????????????????sb.AppendFormat(pageNumLinkString,?tbPageNum.ClientID,?i,?btnSplitPostBack.ClientID.Replace('_',?'$'));
173????????????????}
174????????????????sb.AppendFormat("{0}",?PageNum?+?1);
175????????????????for?(int?i?=?PageNum?+?2;?i?<=?pageEnd;?i++)
176????????????????{
177????????????????????sb.AppendFormat(pageNumLinkString,?tbPageNum.ClientID,?i,?btnSplitPostBack.ClientID.Replace('_',?'$'));
178????????????????}
179
180????????????????lbPageNum.Text?=?sb.ToString();
181????????????}
182????????}
183
184????????/**////?<summary>
185????????///??首頁
186????????///?</summary>
187????????///?<param?name="sender"></param>
188????????///?<param?name="e"></param>
189????????protected?void?lkbtnFirst_Click(object?sender,?EventArgs?e)
190????????{
191????????????SetSplitPage(0,?PerPageShowCount);
192????????}
193
194????????/**////?<summary>
195????????///?上一頁
196????????///?</summary>
197????????///?<param?name="sender"></param>
198????????///?<param?name="e"></param>
199????????protected?void?lkbtnPre_Click(object?sender,?EventArgs?e)
200????????{
201????????????SetSplitPage(PageNum?-?1,?PerPageShowCount);
202????????}
203????????/**////?<summary>
204????????///?下一頁
205????????///?</summary>
206????????///?<param?name="sender"></param>
207????????///?<param?name="e"></param>
208????????protected?void?lkbtnNext_Click(object?sender,?EventArgs?e)
209????????{
210????????????SetSplitPage(PageNum?+?1,?PerPageShowCount);
211????????}
212????????/**////?<summary>
213????????///?末頁
214????????///?</summary>
215????????///?<param?name="sender"></param>
216????????///?<param?name="e"></param>
217????????protected?void?lkbtnLast_Click(object?sender,?EventArgs?e)
218????????{
219????????????SetSplitPage(MaxPageNum?-?1,?PerPageShowCount);
220????????}
221
222????????/**////?<summary>
223????????///?提交信息
224????????///?</summary>
225????????///?<param?name="sender"></param>
226????????///?<param?name="e"></param>
227????????protected?void?btnSplitPostBack_Click(object?sender,?EventArgs?e)
228????????{
229????????????SetSplitPage(int.Parse(tbPageNum.Text)?-?1,?PerPageShowCount);
230????????}
231}
232
使用的時候,把這個放到頁面中,在頁面的Page_load事件中加載事件中就可以了
調用代碼
?1protected?void?Page_Load(object?sender,?EventArgs?e)
?2????????{
?3????????????SplitPage1.SplitPaging?+=?new?EventHandler<SplitEventArgs>(SplitPage1_SplitPaging);
?4????????}
?5//頁面回調事件
?6void?SplitPage1_SplitPaging(object?sender,?WebSite.Admin.Control.SplitEventArgs?e)
?7????????{
?8????????????LoadDataInfo(e.CurrentPage,?e.PerPageShowCount);
?9????????????//設置分頁相關信息
10????????????SplitPage1.SetSplitPageInfo(newPageNum,?PageCount);
11????????}
中國特色沒有代碼下載。 posted on 2008-06-16 16:44 艾飛 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/Airfeeling/archive/2008/06/16/1223156.html
總結
- 上一篇: onerror事件
- 下一篇: DNN 4.x CodeSmith模板