datagrid分页 下一页上一页无链接
 我做了个简单的分页(抄的别人的代码)但是 显示的时候 下一页上一页无链接
在输出的HTML代码中也没有链接
但是页面却没有任何报错
代码如下:Default.aspx
<%@ Page Inherits="Defaultpage" Src="Default.aspx.cs" %>
<html>
<head runat="server">
    <title>新闻系统</title>
</head>
<body>
    <center>asp.net新闻系统</center>
    <table>
       <asp:DataGrid ID="xinwen" runat="server"  AllowCustomPaging="true" PagerStyle-NextPageText="下一页"   
  PagerStyle-PrevPageText="上一页"   
  PagerStyle-Visible="true"  AllowPaging="true" PageSize="20" PagerStyle-Mode="NextPrev"  OnPageIndexChanged="ChangePage" AutoGenerateColumns="false" EnableViewState="true">
       <HeaderStyle BackColor="#00aaaa"></HeaderStyle>
         <Columns>
            <asp:BoundColumn DataField="D_ID" HeaderText="id"/>
            <asp:BoundColumn DataField="D_Title" HeaderText="标题"/>
            <asp:BoundColumn DataField="D_Writer" HeaderText="作者"/>
            <asp:BoundColumn DataField="D_Date" HeaderText="发布时间"/>
         </Columns>
       </asp:DataGrid>
       </table>
</body>
</html>Default.aspx.cs
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Defaultpage : System.Web.UI.Page
{
    public DataGrid xinwen;
    DataSet ds = new DataSet();
    
    void xinwenBind() {        string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
        strConnection += @"Data Source=e:\work\nxy.mdb";
        string strSQL = "SELECT D_ID, D_Title, D_Writer, D_Date FROM NewsData";
        OleDbConnection objConnection = new OleDbConnection(strConnection);
        OleDbDataAdapter da = new OleDbDataAdapter(strSQL,objConnection);
        
        da.Fill(ds, "NewsData");
        xinwen.DataSource = ds.Tables["NewsData"]; 
        xinwen.DataBind();
    
    }
    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) {
          
            xinwenBind();
        }
        
    }
    public void ChangePage(Object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
        xinwen.CurrentPageIndex = e.NewPageIndex;
        xinwen.DataSource = ds.Tables["NewsData"];
        xinwen.DataBind();
    
    }
}

解决方案 »

  1.   

     public void ChangePage(Object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
        {
            xinwen.CurrentPageIndex = e.NewPageIndex;
            //xinwen.DataSource = ds.Tables["NewsData"];
            //xinwen.DataBind();       改成你的方法:xinwenBind() 你去看看
        
        }
      

  2.   

    tongyang 
    de 效果!!!同样的效果
      

  3.   

    public DataGrid xinwen;   //--->什么意思?可以这样重复声明吗?其它没看出问题
      

  4.   

    问题在此:AllowCustomPaging="true" ;(无需自定义分页)
    请尝试去掉该句;--------------------------------------------------------------------------------------
    遇到此种情况,有两种可能性(不完全总结):
    1:添加上了 [AllowCustomPaging="true"];
    2:数据总数(即数据库返回的数据总量)小于或等于PageSize值;
      

  5.   

    应该是ChangePage这个函数没有实现
    或者是返回的数据量小于pagesize
      

  6.   

    回复7楼AllowCustomPaging="true"去掉了
    就报错误
    System.Web.HttpException: 类型“DataGridLinkButton”的控件“xinwen_ctl24_ctl01”必须放在具有 runat=server 的窗体标记内
      

  7.   

    public void ChangePage(Object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
        {
            xinwen.CurrentPageIndex = e.NewPageIndex;
            xinwenBind() ;    
        }
    这样就可以了  
    还有就是ChangePage()注册事件没?
      

  8.   

    ChangePage()注册事件没?
    什么意思
    我不懂!!
      

  9.   

    在datagrid的事件PageIndexChanged里 把ChangePage()加上就可以了
      

  10.   

    public void ChangePage(Object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) 
        { 
            xinwen.CurrentPageIndex = e.NewPageIndex; 
            xinwenBind() ;     
        } 这个该过还是一样
      

  11.   

    加上结果

    错误 1 没有为“Public Sub ChangePage(sender As Object, e As System.Web.UI.WebControls.DataGridPageChangedEventArgs)”的参数“e”指定参数。 E:\work\Default.aspx 9
      

  12.   

    public partial class Defaultpage : System.Web.UI.Page
    {
        public DataGrid xinwen;不要
        DataSet ds = new DataSet();
        
        void xinwenBind() {        string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
            strConnection += @"Data Source=e:\work\nxy.mdb";
            string strSQL = "SELECT D_ID, D_Title, D_Writer, D_Date FROM NewsData";
            OleDbConnection objConnection = new OleDbConnection(strConnection);
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL,objConnection);
            
            da.Fill(ds, "NewsData");
            xinwen.DataSource = ds.Tables["NewsData"]; 
            xinwen.DataBind();
        
        }
        public void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) {
              
                xinwenBind();
            }
            
        }
        public void ChangePage(Object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
        {
            xinwen.CurrentPageIndex = e.NewPageIndex;
            xinwen.DataSource = ds.Tables["NewsData"];
            xinwen.DataBind();
    注释
            xinwenBind();
        }
    }
      

  13.   

    又没有可能你的pagesize设置的太大了
      

  14.   

     事件不引发还不报错,多数都是注册事件丢失,选中datagrid在属性的事件中双击PageIndexChanged
    protected void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
        {
    xinwen.CurrentPageIndex = e.NewPageIndex;  
            xinwenBind() ;  
        }
      

  15.   

    public DataGrid xinwen;不要 则
    错误 2 当前上下文中不存在名称“xinwen” E:\work\Default.aspx.cs 27 9 E:\work\
      

  16.   

    pagesize设置的太大了
    不可能我数据库哭里面又200多记录
      

  17.   

    错误 2 没有为“Public Sub ChangePage(sender As Object, e As System.Web.UI.WebControls.DataGridPageChangedEventArgs)”的参数“sender”指定参数。 E:\work\Default.aspx 9
    错误 1 没有为“Public Sub ChangePage(sender As Object, e As System.Web.UI.WebControls.DataGridPageChangedEventArgs)”的参数“e”指定参数。 E:\work\Default.aspx 9 一样的错误
      

  18.   

    1。首先确保datagrid是可以分页的。
    2。写一个绑定数据源的方法。
    3。在pageIndexChange中编写一定的方法,将当前页码加以改变,再绑定新的数据
      

  19.   

    这是GridView中的分页,想必与DataGrid是差不多的
    public partial class TradeNews : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                BindNewsList();
            }
        }    protected void BindNewsList()
        {
            SqlDataAdapter datpNewsOfHY = new SqlDataAdapter("SELECT bh,bt,zz from newsTable ORDER BY FBSJ DESC", MyConn);
            DataSet dsNewsOfHY = new DataSet();
            datpNewsOfHY.Fill(dsNewsOfHY, "Tnews");
            GridNews.DataSource = dsNewsOfHY.Tables["Tnews"].DefaultView;
            GridNews.DataBind();
        }    protected void GridNews_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridNews.PageIndex = e.NewPageIndex;
            BindNewsList();
        }
    }
      

  20.   

    xinwen.CurrentPageIndex = e.NewPageIndex; 
            xinwenBind() ;     
    放在 DataGrid1_PageIndexChanged()里 
    要是不知道怎么弄 就在datagrid右键属性 的属性页里找到 事件那一页 
    双击PageIndexChanged 就会注册PageIndexChanged事件 再把
    xinwen.CurrentPageIndex = e.NewPageIndex; 
            xinwenBind() ;  
    放在里面就可以了
      

  21.   

    没有PageIndexChanged事件
    只onPageIndexChanged
    可能是不是我的开发环境的问题
    visual stdio 2005
      

  22.   

    visual stdio 2005中GridView控件是DataGrid的增强版,可以设置自动分页,无需编写代码。
      

  23.   

    huifu  
    楼上的

    那我的DataGrid
    到底是什么原因
    出现这样的问题了
      

  24.   

    问题在此:AllowCustomPaging="true" ;(无需自定义分页) 
    请尝试去掉该句; 针对以下错误:
    “AllowCustomPaging="true"去掉了 
    就报错误 
    System.Web.HttpException: 类型“DataGridLinkButton”的控件“xinwen_ctl24_ctl01”必须放在具有 runat=server 的窗体标记内”
    请在<body></body>节点中添加<form runat="server"></form>窗体标签。请尝试!
    -------------------------------------------------------------------------------------- 
    遇到此种情况,有两种可能性(不完全总结): 
    1:添加上了 [AllowCustomPaging="true"]; 
    2:数据总数(即数据库返回的数据总量)小于或等于PageSize值;
      

  25.   

    后台CS代码没问题,现将ASPX代码贴上,请留意:<%@ Page language="c#"  AutoEventWireup="false" Inherits="Defaultpage" Codebehind="Default.aspx.cs" %>
    <html>
    <head runat="server">
        <title>新闻系统</title>
    </head>
    <body>
    <form runat="server">
        <center>asp.net新闻系统</center>
        <table>
           <tr>
              <td>
                 <asp:DataGrid ID="xinwen" runat="server" PagerStyle-NextPageText="下一页" PagerStyle-PrevPageText="上一页" PagerStyle-Visible="true"  AllowPaging="true" PageSize="20" PagerStyle-Mode="NextPrev"  OnPageIndexChanged="ChangePage" AutoGenerateColumns="false" EnableViewState="true">
                 <HeaderStyle BackColor="#00aaaa"></HeaderStyle>
                 <Columns>
                 <asp:BoundColumn DataField="D_ID" HeaderText="id"/>
                 <asp:BoundColumn DataField="D_Title" HeaderText="标题"/>
                 <asp:BoundColumn DataField="D_Writer" HeaderText="作者"/>
                 <asp:BoundColumn DataField="D_Date" HeaderText="发布时间"/>
                 </Columns>
                 </asp:DataGrid>
              </td>
           </tr>
        </table>
    </form>
    </body>
    </html>
      

  26.   

    回复29楼谢谢大哥的热心
    我的问题已经解决
    就是要加<form runat="server" > </form >窗体标签感谢感谢
    非常感谢
      

  27.   

    zenm 怎么结不了帖子啊
    !!!!
      

  28.   

    zenm 怎么结帖子啊??????????????
      

  29.   

    <script type="text/javascript"><!--
    google_ad_client = "pub-9281854226856434";
    /* 728x90, 创建于 09-8-28 */
    google_ad_slot = "5928234748";
    google_ad_width = 728;
    google_ad_height = 90;
    //-->
    </script>
    <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>