【问题标题】:Accessing datatable from different methods从不同的方法访问数据表
【发布时间】:2010-09-08 23:33:15
【问题描述】:

我正在 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
    }
}
}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:
    【解决方案2】:

    正如 Ranhiru 所说,您可以使用缓存,但我个人只会在您确实需要时才这样做。您是否有需要克服的性能问题?

    如果您不这样做,我会避免缓存,因为这会使您的系统设计复杂化。我也绝对避免尝试在页面之间使用相同的数据表(你能够做到这一点的唯一方法是存储在 Session 状态。正如 Kendrick 提到的,你可以使用 ViewState 来存储数据表页面的生命周期 - 但我认为您不能以这种方式将数据表从一个页面传递到另一个页面。

    我建议在回发时保存对数据库的任何更改,然后重定向到另一个页面,然后在另一个页面中,再次从数据库中读取数据。

    【讨论】:

    • 由于数据在 ISeries 上,如果我每次都去数据库,性能会受到影响。根据 Ranhiru 的建议,我尝试了缓存,它可以满足我的目的。如果使用缓存方法有任何缺点,我也愿意尝试其他方法。
    【解决方案3】:

    您可以将其存储在 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
    

    现在您可以通过局部变量从页面中的任何位置访问它。

    如果您在多个页面中需要它,您可以在一个超类中完成所有这些操作,并让您的本地页面扩展该类。

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 2013-05-19
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多