在PostBack之后在GridView中保留DataSource

时间:2011-05-25 04:26:32

标签: c# asp.net gridview datatable

所以我在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);

theDataTable为空。

所以我试过

exportToCsv(gvTheGridView.DataSource)

哪个也是空的。

持久保存此数据的标准方法是什么?我真的不想再次点击数据库,因为这是一个很长的SPROC并且用户已经等了一次。

提前致谢!

3 个答案:

答案 0 :(得分:11)

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

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

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

然后你可以在页面回复中访问它:

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

答案 1 :(得分:5)

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

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

喝彩!

答案 2 :(得分:-2)

感谢大家的答案。

我避免将内容放入VeiwState或会话中,因此我认为保留此数据的最佳方法是缓存它。

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