2010-11-22 35 views
1

我创建了一个应用程序,该应用程序在启动时从数据库中获取笑话并在屏幕上显示第一个笑话。现在,当我们点击下一步按钮时,它应该显示第二个笑话。当我第一次拿起笑话时,我把它们放在全局声明的数据表中。要显示的第一个笑话我做:在回发后维护数据

Title.Value = dt.Rows[0]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0]["joke_content"].ToString(); 

现在,当我点击Next按钮,我运行以下命令:

Title.Value = dt.Rows[0+1]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0+1]["joke_content"].ToString(); 

但在Next按钮被击中,页面回和我失去了数据表中的值。如何在不丢失数据表中的数据的情况下解决错误?

+0

“全球声明的数据表”究竟是什么意思? – Carson63000 2010-11-22 04:47:34

回答

3
i put them in a globally declared datatable 

该数据表在哪里声明?在你的网页类?你能告诉我们这个代码吗? 如果它在你的页面类中,它将不会在回发中持久化。页面类为每个请求重新创建,并且不保留任何状态。

如果要跨回发保持状态,则必须使用状态管理机制(如Viewstate/Session),以便能够维护数据表的旧值。

+0

如何将数据表放入会话变量 – 2010-11-22 04:58:21

+2

Session [“SomeUniqueKey”] = datatable; – InSane 2010-11-22 05:03:39

1

当一个页面被渲染时,在该页面的类中创建的所有对象都被丢弃。现在当发布回发时,数据表不会包含任何数据。要在回传中保存数据,您需要将其存储在某处(如InSane所说的)。如果数据表包含很少的行,那么最好的方法是使用Session对象。再次

​​

在pageLoad的事件处理程序的开始,检查其是否回传,然后读取会话中的数据表:

一旦你从数据库中检索行,数据表存储到会话:

if(this.IsPostBack == true) 
{ 
    DataTable dt = (DataTable)Session["myTable"]; 
} 
else 
{ 
    // fetch the records from database 
} 

请注意,数据表不会在跨会话可用。

0

你也可以用静态数据表来解决这个问题。但是,数据表在所有线程中都是静态的。