Сохранение источника данных в GridView после PostBack - PullRequest
6 голосов
/ 25 мая 2011

Итак, у меня есть GridView на моей странице ASPX.

Когда я нажимаю <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 ]

11 голосов
/ 25 мая 2011

Переменные уровня класса не могут поддерживать свое значение при обратной передаче.

Но есть два способа сохранить данные в PostBack страницы: ViewState and Session State. Но я бы предложил в вашем Сценарии поставить его в ViewState.

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

И тогда вы можете получить к нему доступ на странице обратной передачи:

DataTable theDataTable = (DataTable)ViewState["theDataTable"];
DataTable theDataTable = (DataTable)Session["theDataTable"];
5 голосов
/ 25 мая 2011

Объявите таблицу данных следующим образом, и все будет работать как положено

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

ура! * * 1004

0 голосов
/ 02 апреля 2012

Спасибо за ответы всем.

Я избегаю ненужной загрузки содержимого в VeiwState или сеанс, поэтому я думаю, что лучший способ сохранить эти данные - это кэшировать их.

Я думаю, что MemoryCache является наиболее подходящим местом для этого, так я его реализовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...