CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于datagrid的分页与排序共存的问题???

楼主icefireren()2002-05-22 13:41:34 在 .NET技术 / ASP.NET 提问

通过datagrid的自有属性可以方便的实现分页以及排序,但却有个问题,当datagird分成了多页时,并我处于第五页时,当单击排序按钮(即标题的link)时,由于每次排序需要重新帮定数据源,所以他又自动跳至第一页,有没有办法实现只对单页排序? 问题点数:100、回复次数:16Top

1 楼redcaff_l(热的咖啡)回复于 2002-05-22 13:53:51 得分 10

给你个建议,你在点击排序按钮的时候,能不能将当前的页码CurrentPageIndex作为一个参数传回来,然后就可以指定了。Top

2 楼icyer()回复于 2002-05-22 13:59:07 得分 40

放在ViewState里面。Top

3 楼icefireren()回复于 2002-05-22 15:14:13 得分 0

icyer,把什么放在ViewState里?DataSource?能否告诉我具体该怎么作?谢谢了Top

4 楼icyer()回复于 2002-05-22 15:29:26 得分 0

把当前页的Index放在ViewState里面,每次邦定的时候都从这个ViewState里面读取Page   Index,然后再邦定。Top

5 楼icefireren()回复于 2002-05-22 16:28:54 得分 0

再次谢谢icyer()   ,但你还是没有实现我所说的功能,可能是我没说清楚吧!  
   
  按照你的方法我可以实现在换页后排序时不变成首页,但却无法只对当页数据排序,而是每次排序时均对整个datasource排序了,有没有办法只对本页数据排序?  
   
  另外还有一个问题想问你,如何得到一个datagrid的columns中的boundcolumn的headertext等相关属性,并如何在程序中动态更新他们?谢谢帮忙。Top

6 楼icyer()回复于 2002-05-22 16:58:42 得分 0

"对当页数据排序"?  
  我想这可能会很麻烦。直接对DataSource排序是不可能的了,那只能一行一行的修改,对每一个Cell重新赋值。  
  对于第二个问题,你可以直接通过Columns来获取每一列的属性:  
  DataGrid1.Columns[0].HeaderText   =   "...";  
  DataGrid1.DataBind();       //记得在修改之后要重新邦定Top

7 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2002-05-22 17:17:59 得分 40

我的处理方法,datasource不要使用dataset,而是自己做一个数据类(纯粹数据,没有方法等),然后分页要在存储过程中直接分页(而不是用datagrid自己的分页),取到的结果作为datasource。也就是说,看起来你的datagrid有100页,其实你的datasource中只有10条纪录,就是一页。(假设每页10条)  
  哎,说的啰嗦,就是你的datagrid的数据是分好页后的数据,这样,排序就没有问题了。偶的程序就是这样的。  
  呵呵,给分吧!Top

8 楼icefireren()回复于 2002-05-22 17:19:55 得分 0

:)高手就是高手!!!  
   
  第一个问题:有没有其他更好的方法,如果那样的话那.net数据帮定的优势就体现不直接了,有没有可能通过对datasource分页,每次取其数据页来实现呢?  
   
  第二个问题:  
   
  由于我的指定列是动态的,也就是说需要和用户交互后才知道到底是哪列被选中了,我该如何获得columns的索引呢?Top

9 楼icefireren()回复于 2002-05-22 17:28:05 得分 0

juqiang(鞠强)   ,看来我的想法和你异曲同工啊(见上文),^_^  
  对于DataView有没有办法分页?有没有可能给我个实例程序?如果使用了你自己的数据类,也最好发给我看看,有商业秘密就算了!  
   
  等你回答完这问题后,分一定给!Top

10 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2002-05-22 17:39:16 得分 0

我的分页是通过存储过程实现的,下面是我的代码片段(纯粹的数据实体类),其实,这个想法是看到petshop的代码才有的,建议你看一看!  
  我的代码片段:  
   
  public   static   Zwwldw[]   GetZwwldwList(int   currentPage,   int   pageSize,ref   int   numResults){  
  numResults   =   0;  
  int   i,j;  
   
  Zwwldw[]   tmp   =   new   Zwwldw[pageSize];  
  object[][]   list   =   GetInstanceList(currentPage,pageSize);  
   
  for(i=0;i<list.Length;i++){  
  if(list[i]==null)break;  
  tmp[i]   =   new   Zwwldw();  
  tmp[i].ZWWLDW_DWBH   =   Convert.ToString(list[i][1]);  
  tmp[i].ZWWLDW_DWMC   =   Convert.ToString(list[i][2]);  
  tmp[i].ZWWLDW_EML   =   Convert.ToString(list[i][3]);  
  }  
   
  Zwwldw[]   dw   =   new   Zwwldw[i];  
  for(j=0;j<i;j++){  
  dw[j]   =   tmp[j];  
  }  
   
  return   dw;  
  }  
   
  public   class   Zwwldw{  
  private   string   m_ZWWLDW_DWBH;//客户编号  
  private   string   m_ZWWLDW_DWMC;//客户名称  
  private   string   m_ZWWLDW_EML;//电子邮件地址  
   
   
  ///   <summary>客户编号</summary>  
  public   string   ZWWLDW_DWBH{  
  get{return   m_ZWWLDW_DWBH;}set{m_ZWWLDW_DWBH   =   value;}  
  }  
  ///   <summary>客户名称</summary>  
  public   string   ZWWLDW_DWMC{  
  get{return   m_ZWWLDW_DWMC;}set{m_ZWWLDW_DWMC   =   value;}  
  }  
  ///   <summary>电子邮件地址</summary>  
  public   string   ZWWLDW_EML{  
  get{return   m_ZWWLDW_EML;}set{m_ZWWLDW_EML   =   value;}  
  }  
  }  
   
  Top

11 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2002-05-22 17:44:50 得分 0

补充一句,把如上的Zwwldw[]这个数组,直接作为数据源就可以了。  
   
  例子:(在webpage上调用)  
   
  void   BindData(){  
          //...  
          Zwwldw[]   list   =   ZwwldwManager.GetZwwldwList(page,size,ref   count);  
          dataGrid1.DataSource   =   list;  
          dataGrid1.DataBind();  
          //...  
  }  
   
  就是这样,OK?!Top

12 楼icefireren()回复于 2002-05-22 17:59:37 得分 0

:)贪心了!!!  
   
  解释一下:  
  1。Zwwldw[]   tmp   =   new   Zwwldw[pageSize];  
  在Zwwldw   class的构造器里传入pageSize参数,作用是否通过该参数调用存储过程,然后初始化相关属性值?  
  2。object[][]   list   =   GetInstanceList(currentPage,pageSize);  
  GetInstanceList作用是什么?具体解释解释吧,别小气,老兄!^_^Top

13 楼yxrj()回复于 2002-05-22 18:40:37 得分 10

只对单页排序的话  
  处理当前页的那些item,排完序后  
  把datascoure里的相关数据替换为排序后的数据  
  然后再绑定。  
   
  Top

14 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2002-05-22 21:16:06 得分 0

GetInstanceList是我作的一個BaseClass,之所以返回一個Object[][],就是因爲不知道每一個子類的類型。比如説,可能是Zwwldw的類型,也可能是LSWLZD的類型。  
   
  pagesize也是存儲過程中使用的,但這裡主要是爲了控制Zwwldw[]這個數組的大小,否則,我在BaseClass裏面怎麽new這個數組呢?Top

15 楼icefireren()回复于 2002-05-23 09:17:33 得分 0

谢谢各位,给分了Top

16 楼follcat(笨笨猫)回复于 2002-07-28 17:30:40 得分 0

我自己做的分页处理,比较乱,呵呵  
  首先定义变量  
  然后写了一个GetData和displaypage  
  然后调用  
  Shared   MyConn   As   OleDbConnection   =   New   OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;   Data   Source=c:\inetpub\wwwroot\guestbook\gbook.mdb;")  
          Shared   PageSize   As   Integer   =   5   '定义每页显示的记录条数  
          Shared   TotalPage   As   Integer   =   0   '定义总页数  
          Shared   CurrentPage   As   Integer   =   1   '定义当前页  
          Shared   TotalRecords   As   Integer   =   0   '定义总页数  
          Shared   DS   As   DataSet  
          Shared   CmdStr   As   String   =   ""  
          Shared   aa   As   String   =   ""  
          Shared   Currentind   As   Integer   =   0  
   
          Private   Sub   Page_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
                  If   Not   IsPostBack   Then  
                          DisplayPage()  
                  End   If  
   
                   
          End   Sub  
          Sub   DisplayPage()  
                  MyConn.Close()  
                  If   Not   IsPostBack   Then  
                          GetData("default")  
                          MyDataList.DataSource   =   DS.Tables("gbook").DefaultView  
                          MyDataList.DataBind()  
                  End   If  
                  butPrv.Enabled   =   False  
   
                  If   TotalPage   =   1   Then  
                          butNext.Enabled   =   False  
                  End   If  
   
          End   Sub  
          Public   Shared   Sub   GetData(ByVal   direction   As   String)  
   
                  Dim   TotalCmd   As   OleDbCommand   =   New   OleDbCommand("select   count(*)   from   gbook",   MyConn)  
                  MyConn.Open()  
                  TotalRecords   =   CInt(TotalCmd.ExecuteScalar)  
                  MyConn.Close()  
                  TotalPage   =   CInt(Math.Ceiling(TotalRecords   /   PageSize))  
                  CmdStr   =   "select     *   from   gbook   order   by   id   desc"  
                  Dim   MyCommand   As   OleDbDataAdapter   =   New   OleDbDataAdapter(CmdStr,   MyConn)  
                  Select   Case   direction  
                          Case   "Next"  
                                  CurrentPage   =   CurrentPage   +   1  
                                  Currentind   =   Currentind   +   PageSize  
                          Case   "Prv"  
                                  CurrentPage   =   CurrentPage   -   1  
                                  Currentind   =   Currentind   -   PageSize  
                          Case   Else  
                                  CurrentPage   =   1  
                                  Currentind   =   0  
                  End   Select  
   
                  DS   =   New   DataSet()  
                  MyCommand.Fill(DS,   Currentind,   PageSize,   "gbook")  
          End   Sub  
   
          Sub   butPrv_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   butPrv.Click  
                  GetData("Prv")  
                  MyDataList.DataSource   =   DS.Tables("gbook").DefaultView  
                  MyDataList.DataBind()  
                  If   CurrentPage   =   1   Then  
                          butPrv.Enabled   =   False  
                  Else  
                          butPrv.Enabled   =   True  
                  End   If  
                  butNext.Enabled   =   True  
          End   Sub  
   
          Sub   butNext_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   butNext.Click  
                  GetData("Next")  
                  MyDataList.DataSource   =   DS.Tables("gbook").DefaultView  
                  MyDataList.DataBind()  
                  butPrv.Enabled   =   True  
                  If   CurrentPage   =   TotalPage   Then  
                          butNext.Enabled   =   False  
                  Else  
                          butNext.Enabled   =   True  
                  End   If  
          End   SubTop

相关问题

  • datagrid的排序及分页问题
  • 在DataGrid中同时实现分页和排序时的问题。
  • 请问datagrid即可排序,又可分页如何做?
  • 请问用DataGrid如何使分页跟排序同时进行?
  • 分页后继续排序..
  • DataGrid加入分页和排序就出错,不知道什么原因.
  • DataGrid的分页
  • DATAGRID分页
  • XML先排序,后分页的问题
  • datatable排序分页的问题

关键词

  • 排序
  • 数据
  • datagrid
  • 属性
  • 存储过程
  • 代码
  • zwwldw
  • 分页
  • getinstancelist
  • dwbh

得分解答快速导航

  • 帖主:icefireren
  • redcaff_l
  • icyer
  • juqiang
  • yxrj

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo