chater [花心小刺猬]

人生就是火车站,走了一站又一站......

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  6 随笔 :: 0 文章 :: 27 评论 :: 0 引用

第一次发技术帖,太懒了,真没办法。:(
刚刚换了一家公司,把手中用了两年的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;
    }
   }
  }
 }


}


 

posted on 2006-01-19 12:10 花心小刺猬 阅读(1740) 评论(18)  编辑 收藏

评论

#1楼  2006-01-19 12:22 黑黑      
你没有真正做到自定义分页:
string Sqlstr="Select * from [UploadInfo_Test]";
如果数据量大的话,每次都要从数据库读取所有数据,这样的分页效率非常差。
呵呵。。。
考虑一下:
将DataGird的AllowCustomPaging设成true,然后再写一个按页取数据的sql或者存储过程。

  回复  引用  查看    

#2楼 [楼主] 2006-01-19 12:32 花心小刺猬      
谢谢黑黑,我们这里的数据比较不多,所以是这样用。
回头我把这些分页放到数据库里的存储过程里,再改写一下传上来,多多交流啊。
  回复  引用  查看    

#3楼  2006-01-19 13:41 wuye [未注册用户]
能写一个通用的组件吗?这样重用比较方便啊

还有如果用存储过程来写的话 对于用access来做的应用就比较麻烦了!
最好还是用sql语句来写
  回复  引用    

#4楼  2006-01-19 13:46 涟漪勇      
 
我用过感觉很好的控件,有源代码,你可以研究研究.
小子以后在园子里要多发,勤写啊.
过年回来一块吃饭啊!
 

  回复  引用  查看    

#5楼 [楼主] 2006-01-19 13:47 花心小刺猬      
To:wuye
你的建议值得考率,等把这段忙完了,改写成个组件。
  回复  引用  查看    

#6楼 [楼主] 2006-01-19 13:53 花心小刺猬      
哈,谢谢涟漪勇,以后我要常常发帖!
回来去找你!
  回复  引用  查看    

#7楼  2006-01-19 15:52 ChengKing      
再加一个自定义分页:
http://blog.csdn.net/chengking/archive/2005/11/20/533539.aspx
  回复  引用  查看    

#8楼  2006-01-19 16:26 peterb [未注册用户]
还有如果用存储过程来写的话 对于用access来做的应用就比较麻烦了!
也有存储过程的
  回复  引用    

#9楼  2006-01-19 17:10 chill [未注册用户]
能google到比这要好的多的自定义分页的datagrid.
也是在.net自带的基础上添加代码.我也写过一个,不过由于保密协议的问题,办法公布源码.
  回复  引用    

#10楼  2006-01-19 17:31 难得一蠢      
呵呵,猜猜我是谁??

一不留意,发现你的CSDN帐号,又一不留意发现你的Blog...

过年我回去了..记得出来座座啊....想你啊.....
  回复  引用  查看    

#11楼  2006-01-19 17:31 难得一蠢      
记得来给我留言啊.....
  回复  引用  查看    

#12楼  2006-01-20 08:47 Terrylee      
这样写翻页太累了
可以考虑封装成一个用户控件之类的
这样重用性更高一些:)
  回复  引用  查看    

#13楼  2006-01-20 08:50 [天道酬勤]      
hehe,鼓励一下!
  回复  引用  查看    

#14楼  2006-01-20 09:04 黑黑      
要写就写一个服务器控件。
此外,可以让用户在外面自定义(如.config文件)哪些页面的AllowCustomPaging可以设成true,这样,对于数据少的时候,可以一次性取,等数据多时,再设置成从数据库一页一页地读。
  回复  引用  查看    

#15楼  2006-01-20 10:01 lybabiadnbel      
aspnetpager 是看过的最好的分页控件
  回复  引用  查看    

#16楼  2006-01-20 10:23 xcz [未注册用户]
差劲。。继续努力。。支持
  回复  引用    

#17楼  2006-01-23 10:36 xiaobi [未注册用户]
有vb版的么?
我有几句翻译不过去!
32011023@163.com
谢谢了
  回复  引用    

#18楼  2006-01-23 15:31 QQ      
呵呵,支持小刺猬
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-01-19 12:34 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: