public partial class Test : System.Web.UI.Page
{
    static DataTable DT;
    static string id;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            id = Request.QueryString["id"];
            DBManage DBManage = new DBManage();
            OleDbConnection Conn = DBManage.CreateConnection();
            DataSet DS = new DataSet();
            Conn.Open();
            OleDbDataAdapter DA = new OleDbDataAdapter("Select * from book where uid = " + id, Conn);
            DA.Fill(DS);
            Conn.Close();
            DT = DS.Tables[0];
            List.DataSource = DT;
            List.DataBind();
        }
    }
    protected void List_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        List.PageIndex = e.NewPageIndex;
        List.DataSource = DT;
        List.DataBind();
    }
}
我打开两个页面,第一个id设置为1,第二个id设置为2。可是当第二个用户访问页面之后,第一个用户再翻页,第一个用户的第二页数据显示的居然是第一个用户的。如果听不明白的话你可以理解为DT因为是静态的,那么1最先填充DT的,2再来填充之后,DT就变成2的了,1翻页自然就看见2的了。这里我比较奇怪,DT虽然是静态的,但只是类的全局静态变量呀,2个用户访问应该是创建了2个类,怎么还会变成这样呢?

解决方案 »

  1.   

    呵呵,静态的是这样子的
    以前我也碰到同样的问题了
    想破了头,最后不得不用Session
    望高手来解答...
      

  2.   

    晕奇怪,虽然是静态的,可是这个静态的DT,并不是网站的全局变量,而是一个类的全局变量。Aspx初始化的时候,应该是要初始化类吧?可是现在我怎么感觉像是使用同一个类呢?郁闷
      

  3.   

    你把这个
    static DataTable DT;
        static string id;放到Global.asax的      void Application_Start(object sender, EventArgs e) 
        {
                   
        }
      

  4.   

    1 static变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期只有当程序结束时,这个变量才会被释放2 DataTable是引用类型,也就是指向一个内存空间两者一结合,因为static没被释放,又是引用类型,第二页使用到这个变量时,自然提供的数据是上一页的.
      

  5.   

    网页执行结束就消失了。跟winform不一样。
      

  6.   

    晕 奇怪,虽然是静态的,可是这个静态的DT,并不是网站的全局变量,而是一个类的全局变量。 Aspx初始化的时候,应该是要初始化类吧? 可是现在我怎么感觉像是使用同一个类呢?郁闷==========================================类的静态成员是该类所有实例的共用成员无论第一页还是第二页,都是从class Test 实例化而来的实例,static变量是他们所共有的
      

  7.   

    Repeater和DataList控件提供了一个快速、灵活的表现数据的方式,但是,它们没有内建的分页功能;DataGrid控件提供了内建的分页功能,但它的结构比较复杂。下面就用PagedDataSource类实现Repeater和DataList的分页。 PagedDataSource封装了DataGrid的分页属性,我们可以象DataGrid那样进行分页。代码如下: C#版本 <%@ Page Language="C#" %> 
    <%@ import namespace="System.Data" %> 
    <%@ import namespace="System.Data.OleDb" %> 
    <script language="C#" runat="server"> 
    public void Page_Load(Object src,EventArgs e) { 
    OleDbConnection objConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + 
    Server.MapPath("../<a href="http://dev.21tx.com/web/asp/" target="_blank">ASP</a>x<a href="http://dev.21tx.com/web/" target="_blank">Web</a>.mdb")); 
    OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Document",objConn); 
    DataSet ds=new DataSet(); 
    objCommand.Fill(ds); PagedDataSource objPds = new PagedDataSource(); 
    objPds.DataSource = ds.Tables[0].DefaultView; 
    objPds.AllowPaging = true; 
    objPds.PageSize = 5; 
    int CurPage; 
    if (Request.QueryString["Page"] != null) 
    CurPage=Convert.ToInt32(Request.QueryString["Page"]); 
    else 
    CurPage=1; objPds.CurrentPageIndex = CurPage-1; 
    lblCurrentPage.Text = "当前页:" + CurPage.ToString(); if (!objPds.IsFirstPage) 
    lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1); if (!objPds.IsLastPage) 
    lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1); Repeater1.DataSource=objPds; 
    Repeater1.DataBind(); 

    </script> 
    <html> 
    <head> 
    <title>Repeater控件分页的例子</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    <style> 
    P,TD,DIV,SPAN {font-size:9pt} 
    </style> 
    </head> 
    <body> 
    <form name="form1" method="POST" runat="server"> 
    <div style="padding:5px;background-color:#dedede"> 
    <asp:label ID="lblCurrentPage" runat="server"></asp:label></td> 
    <td> <asp:HyperLink id="lnkPrev" runat="server">上一页</asp:HyperLink> 
    <asp:HyperLink id="lnkNext" runat="server">下一页</asp:HyperLink>  
    </div> 
    <hr size="1" color="#000099"/> 
    <asp:Repeater ID="Repeater1" runat="server"> 
    <Itemtemplate> 
    <div style="padding:5px;background-color:#dedede"> 
    <%# DataBinder.Eval(Container.DataItem, "Title") %> 
    </div> 
    </Itemtemplate> 
    </asp:Repeater> 
    </form> 
    </body> 
    </html> 给你一个代码片断吧你如果想用组件的话AspNetPager真的是很好用,而且是开源的,好象它的作者也经常在这个论坛出现