在Datagrid里自定义翻页

第一次发技术帖,太懒了,真没办法。:(
刚刚换了一家公司,把手中用了两年的VB.net换成了C#,不过好在底层相通,一两天也就上手了。公司让我做的页面里,VS.Net自带的web页面翻页功能不能满足要求,于是自己动手,改写了一下,一则备忘,二则如果有朋友有类似的需求,可以聊以参考,见笑了。:)
这是翻页页面图片:


前端的HTML代码:
<%@ Page language="c#" Codebehind="Test3.aspx.cs" AutoEventWireup="false"

Inherits="UPloadMain.Test.Test3" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
  <title>Test3</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
    <asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 208px; POSITION: absolute; TOP: 88px"
     runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="480px">
<Columns>
<asp:BoundColumn DataField="UpID" HeaderText="UpID"></asp:BoundColumn>
<asp:BoundColumn DataField="UserID" HeaderText="UserID"></asp:BoundColumn>
<asp:BoundColumn DataField="FileType" HeaderText="FileType"></asp:BoundColumn>
<asp:BoundColumn DataField="FileName" HeaderText="FileName"></asp:BoundColumn>
</Columns>

<PagerStyle NextPageText="" PrevPageText="" HorizontalAlign="Center">
</PagerStyle>
    </asp:datagrid><asp:panel id="Panel1" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP:

368px" runat="server"
     Width="704px" Height="40px"></asp:panel></form>
 </body>
</HTML>

后台的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace UPloadMain.Test
{
 /// <summary>
 /// Test3 的摘要说明。
 /// </summary>
 public class Test3 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Panel Panel1;
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if (!Page.IsPostBack)
   {
    binddata();
    ViewState["PageStage"]=0;
   }
   loadlinkbutton();
           
  }

 

  private void binddata()
  {
   string Sqlstr="Select * from [UploadInfo_Test]";
   DataTable myTable=new DataTable();

 .....从数据库中得到DataTable

   DataGrid1.DataSource=myTable;
   DataGrid1.DataBind();
  }

  private void loadlinkbutton()
  {
//   int Index=0;
   Panel1.Controls.Clear();
   int myStage=Convert.ToInt16(ViewState["PageStage"].ToString());
   if (myStage>0)
   {
    LinkButton PreButton=new LinkButton();
    PreButton.ID="lib_Pre";
    PreButton.Text="[前十页]";
    PreButton.Click+=new EventHandler(linkButton_Pre_Click);
    Panel1.Controls.AddAt(0,PreButton);
    Label myLabel=new Label();
//    myLabel.ID="label_"+Panel1.Controls.Count.ToString();
    myLabel.Text="&nbsp;&nbsp;";
    Panel1.Controls.AddAt(Panel1.Controls.Count,myLabel);
   }

 
   for (int i=1;i<=10;i++)
   {
    if (myStage*10+i<=DataGrid1.PageCount)
    {
     LinkButton myButton=new LinkButton();
     myButton.ID="lib_"+i;
     int CurrentPageText=myStage*10+i;
     myButton.Text="["+CurrentPageText.ToString()+"]";
     myButton.Click+=new EventHandler(linkButton_Click);
     Panel1.Controls.AddAt(Panel1.Controls.Count,myButton);
     Label myLabel=new Label();
//     myLabel.ID="label_"+Panel1.Controls.Count.ToString();
     myLabel.Text="&nbsp;";
     Panel1.Controls.AddAt(Panel1.Controls.Count,myLabel);
    }
   }

   if (myStage*10+10<DataGrid1.PageCount)
   {
    Label myLabel=new Label();
    myLabel.Text="&nbsp;";
    Panel1.Controls.AddAt(Panel1.Controls.Count,myLabel);
    LinkButton BackButton=new LinkButton();
    BackButton.ID="lib_Back";
    BackButton.Text="[后十页]";
    BackButton.Click+=new EventHandler(linkButton_Back_Click);
    Panel1.Controls.AddAt(Panel1.Controls.Count,BackButton);

   }

  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
 
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void linkButton_Click(object sender, System.EventArgs e)
  {
   LinkButton ClickButton=new LinkButton();
   ClickButton=(LinkButton)sender;
   string[] ButtonName=ClickButton.ID.ToString().Split('_');
   int CurrPage=Convert.ToInt16(ButtonName[1].ToString());
   int CurrStage=Convert.ToInt16(ViewState["PageStage"].ToString());
   clearbold();
   ClickButton.Font.Bold=true;
//   if (CurrPage==10)
//   {
//    ViewState["PageStage"]=CurrStage+1;
//    loadlinkbutton();
//   }
   DataGrid1.CurrentPageIndex=CurrStage*10+CurrPage-1;
   binddata();

  }

  private void linkButton_Pre_Click(object sender, System.EventArgs e)
  {
            int CurrStage=Convert.ToInt16(ViewState["PageStage"].ToString());
   ViewState["PageStage"]=CurrStage-1;
   loadlinkbutton();
   DataGrid1.CurrentPageIndex=(CurrStage-1)*10;
   binddata();

  }

  private void linkButton_Back_Click(object sender, System.EventArgs e)
  {
   int CurrStage=Convert.ToInt16(ViewState["PageStage"].ToString());
   ViewState["PageStage"]=CurrStage+1;
   loadlinkbutton();
   DataGrid1.CurrentPageIndex=(CurrStage+1)*10;
   binddata();

  }

  private void clearbold()
  {
   for (int i=0;i<=Panel1.Controls.Count-1;i++)
   {
    if (Panel1.Controls[i].GetType().Name=="LinkButton")
    {
                    LinkButton mybutton=new LinkButton();
     mybutton=(LinkButton)Panel1.Controls[i];
     mybutton.Font.Bold=false;
    }
   }
  }
 }


}


from:http://www.cnblogs.com/chater/archive/2006/01/19/320189.html

posted @ 2006-01-19 12:48  torome  阅读(366)  评论(0编辑  收藏  举报