如下代码在分页的时候点1,2页是正常的。。但是点3和3之后就没有变化了,始终显示第2页的数据,请问是什么问题?
namespace CsharpNew
{
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;
using System.Data.OleDb;
using System.Configuration; public class WriteBook : System.Web.UI.UserControl
{ protected System.Web.UI.WebControls.DataGrid DGProList;
int i = 0;
DataSet myDataSet = new DataSet();
protected System.Web.UI.WebControls.Panel ProductPanel;
string strImgName = "";
OleDbConnection Connection = new OleDbConnection(); private void Page_Load(object sender, System.EventArgs e)
{
OpenDatabase();
BindGrid();
} public void OpenDatabase()
{
Connection.ConnectionString = ConfigurationSettings.AppSettings["connectionString"];
Connection.Open();
} public void BindGrid()
{
OleDbConnection myConnection = Connection;
OleDbDataAdapter adapter = new OleDbDataAdapter("select id,title,body,sex,name from WriteBook order by id",myConnection);
adapter.Fill(myDataSet, "ProductFiles");
DGProList.DataSource = myDataSet.Tables["ProductFiles"].DefaultView;
DGProList.DataBind();
} private void DGProList_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DGProList.CurrentPageIndex = e.NewPageIndex;
BindGrid();
} private void DGProList_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType t = e.Item.ItemType;
if(t ==ListItemType.Item || t==ListItemType.AlternatingItem)
{
e.Item.Cells[0].Attributes.Add("title","Double to see detail"); System.Web.UI.WebControls.Label LabName = new Label();
System.Web.UI.WebControls.Label LabTitle = new Label();
System.Web.UI.WebControls.ImageButton Img = new ImageButton();
System.Web.UI.WebControls.Label LabBody = new Label();
System.Web.UI.WebControls.Label LabId = new Label();
System.Web.UI.WebControls.Label LabelTime = new Label();
System.Web.UI.WebControls.LinkButton LinkWrite = new LinkButton(); Img = (ImageButton)e.Item.FindControl("Img");
Img.Width = 50;
Img.Height = 30;
Img.ImageUrl = myDataSet.Tables["ProductFiles"].Rows[i]["Id"].ToString() + ".jpg";
LabName = (Label)e.Item.FindControl("LabName");
LabName.Width = 50;
LabName.Height = 15;
LabName.Text = myDataSet.Tables["ProductFiles"].Rows[i]["name"].ToString();
i = i + 1;
}
}
}
}

解决方案 »

  1.   

    建议你用现在的分页控件www.webdiyer.com
      

  2.   

    给PageLoad加上ispostback试试
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    OpenDatabase();
    BindGrid();
    } }
      

  3.   

    to:LaoDai_Net这种方法不行,这样的话点了分页datagird就不显示了数据表示最简单的测试用的
    id name
    1  wg
    2  y2y
    3  lx
    4  gaoshan我测试用的是一页显示一条数据
      

  4.   

    to hchxxzx谢谢你提供的网址,不过我想知道我的这个代码的问题在哪里
      

  5.   

    //页面开始
    if(!IsPostBack)
    {
             OleDbConnection myConnection = Connection;
             OleDbDataAdapter adapter = new OleDbDataAdapter("select id,title,body,sex,name from WriteBook order by id",myConnection);
             adapter.Fill(myDataSet, "ProductFiles");
             //这里按自己的需求生成ViewState的ID....也可以静态的
             ViewState["DataList"]=myDataSet;
    DGProList.DataSource = myDataSet;
             DGProList.DataBind();
    }
    //分页激发函数
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    DGProList.DataSource=(DataSet)ViewState["DataList"]
    DGProList.CurrentPageIndex=e.NewPageIndex;  
    DGProList.DataBind(); 
    }
      

  6.   

    按照楼上的方法还是不好用。。加了if(!IsPostBack)这句话以后再点分页datagird就显示不出来了
      

  7.   

    使用ViewState["DataList"]=myDataSet;
    而且datagrid的绑定是在激发事件的时候绑定的.不可能显示不了datagird的
    {
    DGProList.DataSource=(DataSet)ViewState["DataList"]
    DGProList.CurrentPageIndex=e.NewPageIndex;  
             //这里执行了绑定,不可能加了Ispostback会显示不了datagird的
    DGProList.DataBind(); 
    }
      

  8.   

    我改成了这样,但是datagird点分页还是不显示啊,请楼上的帮看看
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    OpenDatabase();
    BindGrid();
    }
    } public void OpenDatabase()
    {
    Connection.ConnectionString = ConfigurationSettings.AppSettings["connectionString"];
    Connection.Open();
    } public void BindGrid()
    {
    OleDbConnection myConnection = Connection;

    OleDbDataAdapter adapter = new OleDbDataAdapter("select id,title,body,sex,name from WriteBook order by id",myConnection);
    adapter.Fill(myDataSet, "ProductFiles");
    //DGProList.DataSource = myDataSet.Tables["ProductFiles"].DefaultView;
    DGProList.DataSource = myDataSet;
    ViewState["DataList"]=myDataSet;

    myDataSet = (DataSet)ViewState["DataList"];
    DGProList.DataSource = myDataSet;
    DGProList.DataBind();
    }
    #region Web フォーム デザイナで生成されたコード 
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナで必要です。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// デザイナ サポートに必要なメソッドです。- このメソッドの内容を
    /// コード エディタで変更しないでください。
    /// </summary>
    private void InitializeComponent()
    {
    this.DGProList.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DGProList_PageIndexChanged);
    this.DGProList.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DGProList_ItemDataBound);
    this.DGProList.SelectedIndexChanged += new System.EventHandler(this.Page_Load);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void DGProList_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

    DGProList.DataSource=(DataSet)ViewState["DataList"];
    DGProList.CurrentPageIndex=e.NewPageIndex;  
    DGProList.DataBind(); 
    //DGProList.CurrentPageIndex = e.NewPageIndex;
    //BindGrid();
    } private void DGProList_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    ListItemType t = e.Item.ItemType;
    if(t ==ListItemType.Item || t==ListItemType.AlternatingItem)
    {
    e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#F4F8FD'");
    e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");
    e.Item.Cells[0].Attributes.Add("title","Double to see detail"); System.Web.UI.WebControls.Label LabName = new Label();
    System.Web.UI.WebControls.Label LabTitle = new Label();
    System.Web.UI.WebControls.ImageButton Img = new ImageButton();
    System.Web.UI.WebControls.Label LabBody = new Label();
    System.Web.UI.WebControls.Label LabId = new Label();
    System.Web.UI.WebControls.Label LabelTime = new Label();
    System.Web.UI.WebControls.LinkButton LinkWrite = new LinkButton(); Img = (ImageButton)e.Item.FindControl("Img");
    Img.Width = 50;
    Img.Height = 30;
    Img.ImageUrl = myDataSet.Tables["ProductFiles"].Rows[i]["Id"].ToString() + ".jpg"; //string strDestUrl = myDataSet.Tables["ProductFiles"].Rows[i]["Id"].ToString();
    //Img.Attributes.Add("onclick","javascript:var pageStyle = '';pageStyle = 'toolbar=no,location=no,directories=no,status=no,scrollbars,menubar=no,resizable=no,width=600,height=400,left=100'; window.open("+strDestUrl+"+'.asp?JudgeValue="+strDestUrl+"','SWindow1',pageStyle);");

    LabName = (Label)e.Item.FindControl("LabName");
    LabName.Width = 50;
    LabName.Height = 15;
    LabName.Text = myDataSet.Tables["ProductFiles"].Rows[i]["name"].ToString(); LabTitle = (Label)e.Item.FindControl("LabTitle");
    LabTitle.Width = 50;
    LabTitle.Height = 15;
    LabTitle.Text = myDataSet.Tables["ProductFiles"].Rows[i]["id"].ToString(); LabBody = (Label)e.Item.FindControl("LabBody");
    LabBody.Width = 50;
    LabBody.Height = 15;
    LabBody.Text = myDataSet.Tables["ProductFiles"].Rows[i]["title"].ToString(); LabId = (Label)e.Item.FindControl("LabId");
    LabId.Width = 50;
    LabId.Height = 15;
    LabId.Text = myDataSet.Tables["ProductFiles"].Rows[i]["sex"].ToString(); LabelTime = (Label)e.Item.FindControl("LabelTime");
    LabelTime.Width = 50;
    LabelTime.Height = 15;
    LabelTime.Text = myDataSet.Tables["ProductFiles"].Rows[i]["body"].ToString(); LinkWrite = (LinkButton)e.Item.FindControl("LinkWrite");
    LinkWrite.Width = 50;
    LinkWrite.Height = 15;
    LinkWrite.Text = myDataSet.Tables["ProductFiles"].Rows[i]["Name"].ToString(); i = i + 1;
    }
    }
      

  9.   

    你的i有问题..你不要用i
    i = i + 1;//这里有问题直接使用i=e.item.ItemIndex+(DGProList.PageSize*DGProList.CurrentPageIndex)
    ???你的是日文的?
      

  10.   

    - -不是i有问题...是你的思路有点不清晰...
    i只是你当前页的计数器,当转到第三页的时候在dataset里面i不再代表当前行数啦...
    再说 postback一次,你页面的变量都是重新实例化的.
    不会每次提交i都会在原来的基础上自加的
      

  11.   

    postback一次,页面的变量都是重新实例化的.在到2页的时候i虽然重新实力化为0了,但是仍然能遍历出从1-2所有的rows,为啥到3的时候就只遍历到2,不继续遍历到3呢?
      

  12.   

    页面的工作方式应该是这样的:
    页面加载->(保存并有一个i)->点击第二页-->激发分页事件->(绑定数据)->激发ItemDataBound事件->页面重新加载变量刷新->(i重新为0)->点击第三次分页按钮(无论是第几页)(这时显示的是第一页的数据)->重复