我正在ISeries上创建一个带有后端的Web应用程序。 在页面加载中,我填充数据表并将其用作gridview的数据源。
在同一页面上,从其他方法访问数据表中的数据的最佳方法是什么?在其他页面?
我目前的做法是从gridview获取数据并填充另一个数据表然后使用它...有更好(优雅)的方法吗?将它存储在会话中是个好主意吗?
public partial class Main : System.Web.UI.Page
{
public DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
loadData ld = new loadData();
dt = ld.loadTable();
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void btn_Click(object sender, EventArgs e)
{
foreach (DataRow row in dt.Rows)
{
// do something
}
}
}
答案 0 :(得分:1)
它可能不是最好的,但您可以在ASP .NET中使用缓存
http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=VS.71).aspx
http://msdn.microsoft.com/en-us/library/18c1wd61(v=VS.71).aspx
http://authors.aspalliance.com/aspxtreme/webapps/aspcachingfeatures.aspx
答案 1 :(得分:1)
由于Ranhiru说你可能使用缓存,但我个人只会在你真的需要的时候这样做。您是否遇到了需要克服的性能问题?
如果不这样做,我会避免缓存,因为这会使系统的设计复杂化。我也绝对避免尝试在页面之间使用相同的数据表(你能够做到这一点的唯一方法是存储在Session状态。正如Kendrick所提到的,你可以使用ViewState存储数据表为页面的生命 - 但我不认为你可以通过这种方式将数据表从一个页面传递到另一个页面。
我建议在重新发送到另一个页面之前,在回发时保存对数据库的任何更改,然后在另一个页面中,只需再次从数据库中读取数据。
答案 2 :(得分:0)
您可以将其存储在ViewState中。
OnPageLoad (or Init, depending on what you use it for)
Date In Viewstate?
Load into local variable
else
Create data table in local variable
Save to view state
现在,您可以通过本地变量从页面的任何位置访问它。
如果您需要多个页面,可以在超类中完成所有这些操作,并让您的本地页面扩展该类。