在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=" ";
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=" ";
Panel1.Controls.AddAt(Panel1.Controls.Count,myLabel);
}
}
if (myStage*10+10<DataGrid1.PageCount)
{
Label myLabel=new Label();
myLabel.Text=" ";
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