一個DataGrid分頁控制項,c#寫的,再vb.net中調用,將會不斷完善的

來源:互聯網
上載者:User

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace wxc
{
 /// <summary>
 ///作者:kasafuma
 /// </summary>
 [DefaultProperty("Text"),
  ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
 public class Pager : System.Web.UI.Control,INamingContainer
 {
  [Description("選擇頁事件")]
  public event EventHandler PageChanged;
  #region 控制項屬性列表
  [Browsable(false),
  Description("資料集所有頁的記錄總數"),
  Category("分頁"),
  DefaultValue(0)]
  public int RecordCount
  {
   get
   {
    object obj=ViewState["RecordCount"];
    return (obj==null)?0:(int)obj;
   }
   set
   {
    ViewState["RecordCount"]=value;
   }
  }

  [Browsable(true),
  Description("每頁顯示的記錄數"),
  Category("分頁"),
  DefaultValue(10)]
  public int PageSize
  {
   get
   {
    object obj=ViewState["PageSize"];
    return (obj==null)?10:(int)obj;
   }
   set
   {
    ViewState["PageSize"]=value;
   }
  }
  
  [Browsable(false),
  Description("當前顯示頁"),
  Category("分頁"),
  DefaultValue(0)]
  public int CurrentPage
  {
   get
   {
    object obj=ViewState["CurrentPage"];
    return (obj==null)?0:(int)obj;
   }
   set
   {
    ViewState["CurrentPage"]=value;
   }
  }

  
  [Browsable(false),
  Description("資料集頁總數"),
  Category("分頁"),
  DefaultValue(0)]
  public int PageCount
  {
   get
   {
    object obj=ViewState["PageCount"];
    return (obj==null)?0:(int)obj;
   }
   set
   {
    ViewState["PageCount"]=value;
   }
  }
  [Browsable(true),
  Description("首頁按鈕文本,例如可用:第一頁"),
  Category("分頁")]
  public string FirstPageText
  {
   get
   {
    object obj=ViewState["FirstPageText"];
    return (obj==null)?null:(string)obj;
   }
   set
   {
    ViewState["FirstPageText"]=value;
   }
  }
  [Browsable(true),
  Description("前頁按鈕文本,例如可用:上一頁"),
  Category("分頁")]
  public string PrevPageText
  {
   get
   {
    object obj=ViewState["PrevPageText"];
    return (obj==null)?null:(string)obj;
   }
   set
   {
    ViewState["PrevPageText"]=value;
   }
  }

  [Browsable(true),
  Description("下頁按鈕文本,例如可用:下一頁"),
  Category("分頁")]
  public string NextPageText
  {
   get
   {
    object obj=ViewState["NextPageText"];
    return (obj==null)?null:(string)obj;
   }
   set
   {
    ViewState["NextPageText"]=value;
   }
  }
  [Browsable(true),
  Description("尾頁按鈕文本,例如可用:最後頁"),
  Category("分頁")]
  public string LastPageText
  {
   get
   {
    object obj=ViewState["LastPageText"];
    return (obj==null)?null:(string)obj;
   }
   set
   {
    ViewState["LastPageText"]=value;
   }
  }
  #endregion
  protected override void CreateChildControls()
  {
   
         Label lbl_PageInfo = new Label(); //0
   lbl_PageInfo.Font.Size=10;
   lbl_PageInfo.Text = "尚未綁定";
   Controls.Add(lbl_PageInfo);
                 
   LinkButton btn_First = new LinkButton();   //1
   btn_First.Text = FirstPageText.ToString();
   btn_First.Font.Size=10;
   Controls.Add(btn_First);
   btn_First.Visible = false;
   btn_First.Click += new System.EventHandler(btnFirst_Click);

   Controls.Add(new LiteralControl(" "));    //2

   LinkButton btn_Prev = new LinkButton();    //3
   btn_Prev.Text =PrevPageText.ToString();
   btn_Prev.Font.Size=10;
   Controls.Add(btn_Prev);
   btn_Prev.Visible = false;
   btn_Prev.Click += new System.EventHandler(btnPrev_Click);

   Controls.Add(new LiteralControl(" "));    //4

   LinkButton btn_Next = new LinkButton();    //5
   btn_Next.Text = ViewState["NextPageText"].ToString();
   btn_Next.Font.Size=10;
   Controls.Add(btn_Next);
   btn_Next.Visible = false;
   btn_Next.Click += new System.EventHandler(btnNext_Click);

   Controls.Add(new LiteralControl(" "));    //6

   LinkButton btn_Last = new LinkButton();    //7
   btn_Last.Text = ViewState["LastPageText"].ToString();
   btn_Last.Font.Size=10;
   Controls.Add(btn_Last);
   btn_Last.Visible = false;
   btn_Last.Click += new System.EventHandler(btnLast_Click);
  
   Controls.Add(new LiteralControl("&nbsp;&nbsp;")); //8

   Label lbl_1 = new Label();       //9
   lbl_1.Text = "轉到";
   lbl_1.Font.Size=10;
   lbl_1.Visible = false;
   Controls.Add(lbl_1);

   DropDownList drop_CurPage = new DropDownList();  //10
   drop_CurPage.Items.Add("0");
   drop_CurPage.Font.Size=10;
   Controls.Add(drop_CurPage);
   drop_CurPage.AutoPostBack = true;
   drop_CurPage.Visible = false;
   drop_CurPage.SelectedIndexChanged += new System.EventHandler(ddlCurrentPage_SelectedIndexChanged);

   Label lbl_2 = new Label();       //11
   lbl_2.Text = "頁";
   lbl_2.Font.Size=10;
   lbl_2.Visible = false;
   Controls.Add(lbl_2);
  }
  protected override void OnPreRender(EventArgs e)
  {
   if (!Page.IsPostBack)
   {
    BindPager();
   }
  }
  protected virtual void PageClick(object sender, EventArgs e)
  {
   if (PageChanged != null)
   {
    PageChanged(this,e);
   }
  }

  #region 頁面按鈕和選擇框事件
  private void ddlCurrentPage_SelectedIndexChanged(object sender, System.EventArgs e)
  {
   CurrentPage = ((DropDownList)Controls[10]).SelectedIndex;
   BindPager();
             SendPageChanged();
  }

  private void btnFirst_Click(object sender, System.EventArgs e)
  {
   CurrentPage = 0;
   BindPager();
            SendPageChanged();
  }

  private void btnPrev_Click(object sender, System.EventArgs e)
  {
   CurrentPage = CurrentPage-1;
   BindPager();
           SendPageChanged();
  }

  private void btnNext_Click(object sender, System.EventArgs e)
  {
   CurrentPage = CurrentPage+1;
   BindPager();
            SendPageChanged();
  }

  private void btnLast_Click(object sender, System.EventArgs e)
  {
   CurrentPage = CurrentPage-1;
   BindPager();
   SendPageChanged();

  }
  private void SendPageChanged()
  {
   if (PageChanged != null)
    PageClick(this, EventArgs.Empty);
  
  }
  #endregion
        #region 綁定頁面
  public void BindPager()
  {
    PageCount=(RecordCount%PageSize>0) ? RecordCount/PageSize+1:RecordCount/PageSize;        //總頁數
   ((Label)Controls[0]).Text="共<font color=red>"+RecordCount.ToString()+"</font>條資訊<font color=red>"+PageSize.ToString()+"</font>條/頁 當前<font color=red>"+(CurrentPage+1).ToString()+"</font>/<font color=red>"+PageCount.ToString()+"</font>頁&nbsp;&nbsp;"; 
   ((DropDownList)Controls[10]).Items.Clear();
            for(int i=0;i<PageCount;i++)
   {
    ((DropDownList)Controls[10]).Items.Add(Convert.ToString(i+1));
   }
   ((DropDownList)Controls[10]).SelectedIndex = ((DropDownList)Controls[10]).Items.IndexOf(((DropDownList)Controls[10]).Items.FindByValue(Convert.ToString(CurrentPage+1)));

  
   ((LinkButton)Controls[1]).Visible = true;
   ((LinkButton)Controls[3]).Visible   = true;
   ((LinkButton)Controls[5]).Visible  = true;
   ((LinkButton)Controls[7]).Visible  = true;
   ((Label)Controls[9]).Visible   = true;
   ((Label)Controls[11]).Visible   = true;
   ((DropDownList)Controls[10]).Visible = true;

   ((LinkButton)Controls[1]).Enabled = true;
   ((LinkButton)Controls[3]).Enabled   = true;
   ((LinkButton)Controls[5]).Enabled  = true;
   ((LinkButton)Controls[7]).Enabled  = true;

   if (CurrentPage==0)
   {
    ((LinkButton)Controls[1]).Enabled = false;
    ((LinkButton)Controls[3]).Enabled   = false;
    ((LinkButton)Controls[5]).Enabled  = true;
    ((LinkButton)Controls[7]).Enabled  = true;
   }
   if (CurrentPage==PageCount-1)
   {
    ((LinkButton)Controls[1]).Enabled = true;  //如果是自訂圖片按鈕可以 1ibtnFirst.Attributes["disabled"] = "disabled" 不能點; 2ibtnFirst.Attributes.Remove("disabled") ;能點
    ((LinkButton)Controls[3]).Enabled   = true;
    ((LinkButton)Controls[5]).Enabled  = false;
    ((LinkButton)Controls[7]).Enabled  = false;
   }
   if ((PageCount-1) == 0 )
   {
    ((LinkButton)Controls[1]).Enabled = false;
    ((LinkButton)Controls[3]).Enabled   = false;
    ((LinkButton)Controls[5]).Enabled  = false;
    ((LinkButton)Controls[7]).Enabled  = false;
   }
  }
  #endregion

 }
}
調用時候
 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此處放置初始化頁的使用者代碼
        If Not IsPostBack Then   
                       BindData(0)
        End If
    End Sub
 Private Sub BindData(ByVal CurrentPage As Integer)
        txtSQL = "select * from Orders"
        DBSet = ExecutePager(txtSQL, CurrentPage, Pager1, ErrorMsg)
        Datagrid2.DataSource = DBSet.Tables(0).DefaultView
        Datagrid2.DataBind()    
        Pager1.RecordCount = 47 //當然這樣寫肯定是錯的,這裡還需要計算一下頁數
        Pager1.DataBind()
    End Sub

Private Sub Change(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Pager1.PageChanged
        BindData(Pager1.CurrentPage)
    End Sub

在模組中寫個公用函數:
Public Function ExecutePager(ByVal strSQL As String, ByVal CurrentPage As Integer, ByVal Pager As Object, ByRef errMsg As String) As DataSet
        Dim cnn As SqlClient.SqlConnection
        Dim cmd As New SqlClient.SqlCommand
        Dim adpt As SqlClient.SqlDataAdapter
        Dim rst As New DataSet
        Dim SplitSQL() As String
        errMsg = ""
        Try
            cnn = New SqlClient.SqlConnection("data source=(local);initial catalog=Northwind;user id=sa;pwd='hyaocuk!'")
            adpt = New SqlClient.SqlDataAdapter(strSQL, cnn)
            adpt.Fill(rst, Pager.PageSize * CurrentPage, Pager.PageSize, "tb")
'這種分頁效率也不是很高的,最好調用預存程序分頁
            ExecutePager = rst
        Catch ex As Exception
            errMsg = ex.Message
        Finally
            rst = Nothing
            cnn = Nothing
        End Try
    End Function

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.