PostBack后在GridView中持久化DataSource

本文关键字:持久化 DataSource GridView 后在 PostBack | 更新日期: 2023-09-27 17:57:40

所以我的ASPX页面中有一个GridView。

当我点击<asp:Button id="btnBindIt" runat="server" />时,它绑定了一个数据表,如下所示:

theDataTable = GetAllTheRecords();
gvTheGridView.DataSource = theDataTable;
gvTheGridView.DataBind();

注:theDataTable是成员

private DataTable theDataTable;

这是意料之中的事。

现在,在GridView显示得很好之后,我想将数据导出到CSV,所以我现在单击运行代码的<asp:Button id="btnExportIt" runat="server" />

exportToCsv(theDataTable);

但CCD_ 4为空。

所以我尝试了

exportToCsv(gvTheGridView.DataSource)

这也是空的。

保持这些数据的标准方法是什么?我真的不想再次访问DB,因为这是一个相当长的SPROC,用户已经等过一次了。

提前感谢!

PostBack后在GridView中持久化DataSource

类级变量在回发时无法保持其值。

但是有两种方法可以在页面的PostBack上维护数据:ViewState and Session State。但我建议在您的场景中,将其放在ViewState中。

ViewState["theDataTable"] = theDataTable;
Session["theDataTable"] = theDataTable;

然后你可以在回发页面上访问它:

DataTable theDataTable = (DataTable)ViewState["theDataTable"];
DataTable theDataTable = (DataTable)Session["theDataTable"];

如下声明数据表,一切都将按预期工作

    private string _theDataTable="theDataTable";
    private DataTable theDataTable
    {
            get
            {
                    if(ViewState[_theDataTable]==null)
                            return new DataTable();
                    return (DataTable)ViewState[_theDataTable];
            }
            set
            {
                    ViewState[_theDataTable] = value;
            }
    }

欢呼!

感谢大家的回答。

我避免不必要地将数据放入VeiwState或会话,所以我认为保存这些数据的最佳方法是缓存它

我认为MemoryCache是最合适的地方,这就是我最终实现它的方式