CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

关于分页与查询的问题(在线等)

楼主guyong009(问题这么多,快要上岗了)2005-08-02 09:47:14 在 .NET技术 / C# 提问

一、问题描述:  
          有一个下拉框形式的查询条件,当我选择不同的值时,页面显示不同的内容(用DataGrid显示)。但当记录条数超过一页时,就会出错。出错条件是:我点击下一页,然后再在拉框选择不同的值,即改变查询条件,这是就报错了:  
          “无效的   CurrentPageIndex   值。它必须大于等于   0   且小于   PageCount”  
          “源错误:    
          行   98:   adapter.Fill(ds,"clgl_xtdm");  
          行   99:   MyDataGrid.DataSource   =   ds.Tables["clgl_xtdm"].DefaultView;  
          行   100:MyDataGrid.DataBind();  
          行   101:ShowStats();  
          行   102: }”(其中第100行是红色的)  
  二、调试信息:  
          用Response.Write(sqlstring);输出查询语句:  
          1、当我点击下一页,然后改变查询条件时会输出两条SQL语句,比如:select   *   from   clgl_xtdm   where   xh   like   '%'   order   by   fldh,xmmc   select   *   from   clgl_xtdm   where   xh   like   '%'   order   by   fldh,xmmc   。此时再改变下拉框值,既改变查询条件进行查询时就出现上面所描述的错误。  
          2、在其它情况下都只一条SQL语句,比如:select   *   from   clgl_xtdm   where   xh   like   '%'   order   by   fldh,xmmc   。此时也不会出错。  
  三、全部代码:  
          1、页面装载代码:  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  btnFirst.Text   =   "最首页";  
  btnPrev.Text   =   "前一页";  
  btnNext.Text   =   "下一页";  
  btnLast.Text   =   "最后页";  
  OpenDatabase();  
  BindGrid();  
  }  
          2、数据库关闭打开代码:  
  private   void   OpenDatabase()  
  {  
                                                  cn.Close();  
              cn.Open();  
  }  
          3、显示总共多少页和当前第几页的代码:  
  private   void   ShowStats()  
  {  
      lblCurrentIndex.Text   =   "第   "   +   (MyDataGrid.CurrentPageIndex   +   1).ToString()   +   "   页";  
      lblPageCount.Text   =   "总共   "   +   MyDataGrid.PageCount.ToString()   +   "   页";  
  }  
            4、“上一页”、“下一页”等按钮的单击代码:  
  public   void   PagerButtonClick(object   sender,   EventArgs   e)  
  {  
  string   arg   =   ((LinkButton)sender).CommandArgument.ToString();  
  switch(arg)  
  {  
  case   "next":  
  if   (MyDataGrid.CurrentPageIndex   <   (MyDataGrid.PageCount   -   1))  
  {  
        MyDataGrid.CurrentPageIndex   +=   1;  
  }  
  break;  
  case   "prev":  
  if   (MyDataGrid.CurrentPageIndex   >   0)  
  {  
        MyDataGrid.CurrentPageIndex   -=   1;  
  }  
  break;  
  case   "last":  
                    MyDataGrid.CurrentPageIndex   =   (MyDataGrid.PageCount   -   1);  
                    break;  
  default:  
  MyDataGrid.CurrentPageIndex   =   System.Convert.ToInt32(arg);  
  break;  
  }  
  BindGrid();  
  ShowStats();  
  }  
            5、执行SQL语句的代码:  
  public   void   BindGrid()  
  {  
  string   flmc=DropDownList1.SelectedItem.Text;  
  Response.Write(flmc);  
  string   sql_tj="";  
  if   (flmc!="所有代码")  
  sql_tj="   and   flmc='"+flmc+"'";  
  string   sqlstring="select   *   from   clgl_xtdm   where   xh   like   '%'";  
  sqlstring=sqlstring+sql_tj;  
  sqlstring+="   order   by   fldh,xmmc";  
  Response.Write(sqlstring);  
  OleDbConnection   myConnection   =   cn;  
  DataSet   ds     =   new   DataSet();  
  OleDbDataAdapter   adapter     =   new   OleDbDataAdapter(sqlstring,myConnection);  
  adapter.Fill(ds,"clgl_xtdm");  
  MyDataGrid.DataSource   =   ds.Tables["clgl_xtdm"].DefaultView;  
  MyDataGrid.DataBind();  
  ShowStats();  
  }  
                6、进行页数统计的代码:  
  public   void   MyDataGrid_Page(object   sender,   DataGridPageChangedEventArgs   e)  
  {  
  int   startIndex   ;  
  startIndex   =   MyDataGrid.CurrentPageIndex   *   MyDataGrid.PageSize;  
  MyDataGrid.CurrentPageIndex   =   e.NewPageIndex;  
  BindGrid();  
  ShowStats();  
  }  
                  7、下拉框的值改变时的事件代码(无代码,里面是空的)  
  private   void   DropDownList1_SelectedIndexChanged(object   sender,   System.EventArgs   e)  
  {  
                                        }  
  四、请问应该怎么修改? 问题点数:100、回复次数:11Top

1 楼guyong009(问题这么多,快要上岗了)回复于 2005-08-02 10:28:18 得分 0

顶~~~Top

2 楼mooddecode1980(心情解码)回复于 2005-08-02 10:34:01 得分 1

:)Top

3 楼wxqq2001(就让我用一生等待)回复于 2005-08-02 10:34:58 得分 10

改变查询条件后要把CurrentPageIndex   置   0   重新绑定数据!  
   
  建议看看孟子老大的文章不过我这里怎么上不去.  
   
  也可以看这个http://www.cnblogs.com/lovecherry/archive/2005/03/25/125487.htmlTop

4 楼silverseven7(就差100 分就升级,多给我点吧)回复于 2005-08-02 10:47:11 得分 4

 
  ///   <summary>  
  ///   Page   Index   Changed  
  ///   </summary>  
  ///   <param   name="source"></param>  
  ///   <param   name="e"></param>  
  private   void   dg_MstArea_PageIndexChanged(object   source,   System.Web.UI.WebControls.DataGridPageChangedEventArgs   e)  
  {  
  ComLogOutput.WriteLogFile("dg_MstArea_PageIndexChanged   Begin");  
  BindDataGrid(e.NewPageIndex);  
  ComLogOutput.WriteLogFile("dg_MstArea_PageIndexChanged   End");  
  }  
   
   
  ///   Bind   data   onto   the   datagrid  
  ///   </summary>  
  private   void   BindDataGrid(int   CurrentPageNumber)  
  {  
  DataSet   dsBind =   null;  
   
   
  if(this.Session["dsp_MstArea_DgData"]==null)  
  {  
  if(!SearchData())  
  {  
  return;  
  }  
  }  
   
  dsBind   =   (DataSet)this.Session["dsp_MstArea_DgData"];  
  SetResultPage(true);  
   
  //set   datagrid   source  
  dsBind.Tables[0].DefaultView.Sort   =   this.hid_SortField.Value   +   this.hid_SortType.Value;  
  this.dg_MstArea.DataSource   =dsBind.Tables[0].DefaultView;  
   
  //******   move   view   item   to   dsBind   item   ******  
  DataSet   dsCopy   = SetViewToDataSet(dsBind);  
  Session["dsp_MstArea_DgData"]   =   dsCopy;  
   
  //set   page   size  
  dg_MstArea.PageSize   =   dpl_PageSize.GetDDlValue;  
  dg_MstArea.CurrentPageIndex   =   CurrentPageNumber;  
   
  //current   page   check  
  SetDataGridPageIndex(dg_MstArea,dsBind.Tables[0].Rows.Count);  
   
  //bind  
  this.dg_MstArea.DataBind();  
  dpl_PageSize.SetCountToLable   =   dsBind.Tables[0].Rows.Count;  
  }Top

5 楼chinagy(会员GY)回复于 2005-08-02 10:56:20 得分 10

重新绑定数据后,应将DataGrid的CurrentPageIndex=0,如果你不想改变页号就得先检查新的DataGrid中DataSouce中的数据页数是否小于当前的CurrentPageIndex,如果超出范围,就得重设CurrentPageIndex.Top

6 楼guyong009(问题这么多,快要上岗了)回复于 2005-08-02 11:01:28 得分 0

那我上面的代码应该怎么改?Top

7 楼chinagy(会员GY)回复于 2005-08-02 11:11:37 得分 70

public   void   BindGrid()  
  {  
  string   flmc=DropDownList1.SelectedItem.Text;  
  Response.Write(flmc);  
  string   sql_tj="";  
  if   (flmc!="所有代码")  
  sql_tj="   and   flmc='"+flmc+"'";  
  string   sqlstring="select   *   from   clgl_xtdm   where   xh   like   '%'";  
  sqlstring=sqlstring+sql_tj;  
  sqlstring+="   order   by   fldh,xmmc";  
  Response.Write(sqlstring);  
  OleDbConnection   myConnection   =   cn;  
  DataSet   ds     =   new   DataSet();  
  OleDbDataAdapter   adapter     =   new   OleDbDataAdapter(sqlstring,myConnection);  
  adapter.Fill(ds,"clgl_xtdm");  
  MyDataGrid.DataSource   =   ds.Tables["clgl_xtdm"].DefaultView;  
  MyDataGrid.DataBind();  
  //就改这就行了,其它不用动  
  if   (   MyDataGrid.PageCount   <=   CurrentPageIndex   )  
          CurrentPageIndex   =   0;  
  ////或者直接显示第一页也行  
  //CurrentPageIndex   =   0;  
  ShowStats();  
  }  
  Top

8 楼mbh0210(独孤求败)回复于 2005-08-02 11:15:22 得分 5

看的我糊涂,你选择不同的条件的时候绑定不同的dataset,在代码中直接设置CurrentPageIndex=0;试试看.....Top

9 楼guyong009(问题这么多,快要上岗了)回复于 2005-08-02 11:19:10 得分 0

TO:chinagy(会员GY)  
  运行是报错说:名称CurrentPageIndex   在类或命名空间不存在Top

10 楼guyong009(问题这么多,快要上岗了)回复于 2005-08-02 11:23:27 得分 0

TO:chinagy(会员GY):  
            直接改成MyDataGrid.CurrentPageIndex   =   0;好象可以了:)  
  Top

11 楼chinagy(会员GY)回复于 2005-08-02 11:29:19 得分 0

呵呵~~写错了!应该是MyDataGrid.CurrentPageIndex.Top

相关问题

  • 查询后分页
  • 关于一个查询的分页显示处理,在线等!
  • oracle查询分页显示
  • 如何做查询分页?
  • 查询后分页技术
  • 查询分页的问题
  • 查询分页问题
  • 查询分页问题
  • 在线讨论。请问如何在查询的结果中分页?
  • 查询结果分页显示时,按下一页,得到的不是查询结果??在线,

关键词

  • 代码
  • 查询
  • 语句
  • ds
  • clgl
  • mstarea
  • xtdm
  • flmc
  • sqlstring
  • dsbind

得分解答快速导航

  • 帖主:guyong009
  • mooddecode1980
  • wxqq2001
  • silverseven7
  • chinagy
  • chinagy
  • mbh0210

相关链接

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

广告也精彩

反馈

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