现在的位置: 首页 > 综合 > 正文

一个DataGrid分页控件,c#写的,再vb.net中调用,将会不断完善的

2013年01月09日 ⁄ 综合 ⁄ 共 8564字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.