解決Asp.net中翻頁問題的自定義使用者控制元件 (轉)
不知道為什麼,既然提供了DataGrid的分頁功能,為什麼功能那麼弱,要麼只有上一頁、下一頁,要麼就1、2、3、4、5、6頁,根本不符合我們中國的“國情”啊。在我的印象裡,好像不但要有“首頁”、“上頁”、“下頁”、“末頁”,還要有Goto到指定頁等等,才算完美啊。不知道大家是否有同感。
鑑於此,我寫了個關於DataGrid的分頁功能的一個自定義,只要DataGrid需要翻頁,就把此自定義控制元件過進來,在簡單的Copy一下程式碼,就OK了。以下是自定義控制元件的程式碼。和如何使用它的程式碼,供大家參考,不妥之處,望批之。
1、自定義使用者控制元件名稱為 ChangePage.ascx
1.1、介面段的程式碼如下
" AutoEventWireup="false" Codebehind="ChangePage.ascx.cs" Inherits="Education..ChangePage"
TargetSchema=".com/lisense/"%'>"%>
<:linkbutton id="btnFirst" runat="server" CssClass="Linkbutton" Text="首頁" CommandArgument="0">首頁
CssClass="text"> |
介面段程式碼結束
1.2、ChangePage.ascx.cs CodeBehind程式碼如下
namespace Education.Web
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
///
/// 自定義使用者控制元件,用來顯示Grid分頁
///
public abstract class ChangePage : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.LinkButton btnFirst;
protected System.Web.UI.WebControls.LinkButton btnPrev;
protected System.Web.UI.WebControls.LinkButton btnNext;
protected System.Web.UI.WebControls.LinkButton btnLast;
protected System.Web.UI.WebControls.Label lblGoPage;
protected System.Web.UI.WebControls.TextBox txtGoPage;
protected System.Web.UI.WebControls.Label lblPage;
protected System.Web.UI.WebControls.Button btnGo;
protected System.Web.UI.WebControls.Label lblCurrentIndex;
//宣告翻頁事件
public delegate void PageInddEventHandler( sender, System.EventArgs e);
public event PageIndexChangedEventHandler PageIndexChanged;
//宣告GoTo事件
public delegate void GoPageEventHandler(object sender, int PageIndex);
public event GoPageEventHandler GoPage;
protected virtual void OnPageIndexChanged(object sender,System.EventArgs e)
{
if (PageIndexChanged != null)
PageIndexChanged(sender, e);
}
protected virtual void OnGoPage(object sender,int PageIndex)
{
if (GoPage != null)
GoPage(sender, PageIndex);
}
private void Page_Load(object sender, System.EventArgs e)
{
//判斷txtGoPage輸入的是否為數字
this.btnGo.Attributes.Add("onclick","return val_num("+this.txtGoPage.ClientID.ToString()+")");
}
//設定翻頁按鈕的Enabled屬性
public void PagerButtonEnable(System.Web.UI.WebControls.DataGrid dgPage)
{
btnFirst.Enabled = (dgPage.CurrentPageIndex == 0 ? false : true);
btnPrev.Enabled = (dgPage.CurrentPageIndex == 0 ? false : true);
btnNext.Enabled = (dgPage.CurrentPageIndex == (dgPage.PageCount - 1) ? false : true);
btnLast.Enabled = (dgPage.CurrentPageIndex == (dgPage.PageCount - 1) ? false : true);
}
//顯示頁面資訊
public void ShowStats(System.Web.UI.WebControls.DataGrid dgPage)
{
lblCurrentIndex.Text = "頁碼:[ " + ((int)dgPage.CurrentPageIndex+1) + " / "+ dgPage.PageCount + " ]" ;
}
//首頁
private void btnFirst_Click(object sender, System.EventArgs e)
{
OnPageIndexChanged( sender , e );
}
//上頁
private void btnPrev_Click(object sender, System.EventArgs e)
{
OnPageIndexChanged( sender , e );
}
//下頁
private void btnNext_Click(object sender, System.EventArgs e)
{
OnPageIndexChanged( sender , e );
}
//末頁
private void btnLast_Click(object sender, System.EventArgs e)
{
OnPageIndexChanged( sender , e );
}
//GoTo到某一頁
private void btnGo_Click(object sender, System.EventArgs e)
{
OnGoPage( sender ,Convert.ToInt32(this.txtGoPage.Text) );
}
#region Web FoDesigner generated code
overr protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
ChangePage.ascx.cs CodeBehind程式碼結束
2、如何在其他的頁面中使用翻頁的使用者自定義控制元件
2.1、頁面中拖拽的使用者自定義控制元件程式碼如下
2.2、CodeBehind程式碼如下
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.Client;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Education.Web
{
///
/// 維護頁面
///
public class TeachingCenterList : System.Web.UI.Page
{
//宣告翻頁使用者控制元件 注意:名稱tcChangePage應該和拖拽過來後的介面中的ChangePage控制元件的ID相同
protected ChangePage tcChangePage;
protected System.Web.UI.WebControls.DataGrid MyDataGrid; //要翻頁的DataGrid控制元件的名稱
public void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
//網格資料繫結
BindGrid();
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
//翻頁控制元件中的事件宣告
tcChangePage.PageIndexChanged +=new ChangePage.PageIndexChangedEventHandler(this.PageButtonClick); //翻頁事件
tcChangePage.GoPage +=new ChangePage.GoPageEventHandler(this.PageGoButtonClick); //GoTo事件
}
#endregion
/// 網格資料繫結
void BindGrid()
{
//讀取的資訊,獲得DataView 將DataView繫結到DataGrid上去
{....}
//顯示頁碼
tcChangePage.ShowStats( MyDataGrid );
//判斷翻頁按鈕Enable狀態
tcChangePage.PagerButtonEnable( MyDataGrid );
}
#region 翻頁處理 程式碼的主體部分
/// 翻頁按鈕事件處理
///
///
///
public void PageButtonClick(Object sender,System.EventArgs e)
{
//獲得LinkButton的引數值
String arg = ((LinkButton)sender).CommandArgument;
switch(arg)
{
case ("next"): //下頁
if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1))
MyDataGrid.CurrentPageIndex ++;
break;
case ("prev"): //上頁
if (MyDataGrid.CurrentPageIndex > 0)
MyDataGrid.CurrentPageIndex --;
break;
case ("last"): //末頁
MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1);
break;
default: //首頁
MyDataGrid.CurrentPageIndex = 0;
break;
}
//網格資料繫結
BindGrid();
//網格資料指定
MyDataGrid.SelectedIndex = 0 ;
//指定到網格中第一行,同時將資料顯示到明細視窗(顯示)
SelectItemCommand( 0 , "顯示");
}
///
/// 翻頁Go按鈕處理事件
///
///
///
public void PageGoButtonClick(Object sender , int PageIndex)
{
//獲得Button的引數值
string arg = ((Button)sender).CommandArgument;
switch(arg)
{
case ("GoPage"): //指定到某一頁
if (PageIndex <= MyDataGrid.PageCount)
{
MyDataGrid.CurrentPageIndex = (PageIndex-1);
}
else
{
MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount-1);
}
break;
}
//網格資料繫結
BindGrid();
//網格資料指定
MyDataGrid.SelectedIndex = 0 ;
//指定到網格中第一行,同時將資料顯示到明細視窗(顯示)
SelectItemCommand( 0 , "顯示");
}
#endregion
}
}
程式碼寫了一大堆,看上去挺複雜,其實挺簡單的,呵呵,如果覺得是垃圾,請棄之。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977278/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用者自定義控制元件拖拽失敗問題控制元件
- 建立ASP.NET WEB自定義控制元件(轉)ASP.NETWeb控制元件
- 自定義asp.net控制元件分析 (一) (轉)ASP.NET控制元件
- 自定義asp.net控制元件分析(二) (轉)ASP.NET控制元件
- 自定義控制元件中的控制元件呼叫引用控制元件的頁面裡的函式 (轉)控制元件函式
- 自定義分頁控制元件控制元件
- asp.net 內容頁訪問母版頁中的控制元件ASP.NET控制元件
- 用指令碼解決ASP.NET頁面重新整理問題 (轉)指令碼ASP.NET
- 關於vb自定義控制元件中引用mediaplayer控制元件出錯的解決方案控制元件
- 關於在頁面中解決列印的幾個問題 (轉)
- 談談學完Asp.net 中的自定義控制元件後的感受ASP.NET控制元件
- Hanlp配置自定義詞典遇到的問題與解決方法HanLP
- 【自定義使用者控制元件】CNMButton控制元件
- WinForm 載入自定義控制元件閃爍問題ORM控制元件
- 開發asp.net自定義控制元件(asp.net學習筆記三) (轉)ASP.NET控制元件筆記
- 開發asp.net自定義控制元件(asp.net學習筆記四) (轉)ASP.NET控制元件筆記
- 開發asp.net自定義控制元件(asp.net學習筆記五) (轉)ASP.NET控制元件筆記
- 中文自定義字型列印解決!(轉)自定義字型
- ASP.NET中自定義DataGrid分頁設定的實現ASP.NET
- 解決ASP.NET中的各種亂碼問題ASP.NET
- 純 CSS 解決自定義 CheckBox 背景顏色問題CSS
- Android自定義View--翻書控制元件(一)AndroidView控制元件
- 研究心得------->Seskin控制元件包中SeskinEdit漢字問題的解決辦法 (轉)控制元件
- 解決spring security自定義filter重複執行問題SpringFilter
- 解決django中超連結頁面不跳轉的問題Django
- 自定義key解決zabbix埠監聽取值不準確的問題
- Android 完美解決自定義preference與ActivityGroup UI更新的問題薦AndroidUI
- UserControl 使用者自定義控制元件控制元件
- 如何解決電腦桌面翻轉的問題?
- 批次查詢的翻頁問題
- 解決VC中增加類檔案的問題 (轉)
- Hibernate使用者自定義資料型別問題資料型別
- Android自定義控制元件之自定義組合控制元件Android控制元件
- Android鬼點子 自定義控制元件印上LOGO的解決思路Android控制元件Go
- C++自定義貪吃蛇Snake類一系列問題的解決C++
- 【問題&解決】手機網頁Html程式碼實現(解決顯示頁面很小的問題)網頁HTML
- 【轉】css解決相容的問題CSS
- Android自定義控制元件——自定義屬性Android控制元件