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个类,怎么还会变成这样呢?
以前我也碰到同样的问题了
想破了头,最后不得不用Session
望高手来解答...
static DataTable DT;
static string id;放到Global.asax的 void Application_Start(object sender, EventArgs e)
{
}
<%@ 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真的是很好用,而且是开源的,好象它的作者也经常在这个论坛出现