ASPxGridView кэширование данных - PullRequest
0 голосов
/ 26 декабря 2011

Я установил, что источник GridView должен быть результатом хранимой процедуры, которая в основном имеет данные.

ASPxGridView1.DataSource = dt1;
ASPxGridView1.DataBind();

Это происходит при нажатии кнопки. На первом шаге все в порядке, но когда я пытаюсь отсортировать, отфильтровать или перейти на следующую страницу результатов, gridview пусто, и я должен нажать кнопку (чтобы вызвать DataBind, очевидно), чтобы увидеть результаты.

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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 26 декабря 2011

Обычно при обновлении данных ASPxGridView или WebChartControl во время выполнения эта информация не кэшируется автоматически.

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

Для повышения производительности вы можете сохранить данные в Session/Cache переменная.

Для ознакомления проверьте DevExpress KB в отношении вашего вопроса и KB:
повторное связывание сетки при каждой обратной передаче
Свяжите сетку с таблицей данных с помощью кода.
Почему подкачка страниц (сортировка, группировка, фильтрация) может не работать в ASPxGridView?

// Кэшировать DataTable в сеансе, чтобы избежать нескольких попаданий в базу данных при каждой обратной передаче

 DataTable GetTable() {
            //You can store a DataTable in the session state
            DataTable table = Session["Table"] as DataTable;
            if (table == null) {
                table = new DataTable();
                table.Columns.Add("id", typeof(int));
                table.Columns.Add("data", typeof(String));
                for (int n = 0; n < 100; n++) {
                    table.Rows.Add(n, "row" + n.ToString());
                }
                Session["Table"] = table;
            }

            //Otherwise you have to create a DataTable instance on every request:
            //DataTable table = new DataTable();
            //table.Columns.Add("id", typeof(int));
            //table.Columns.Add("data", typeof(String));
            //for(int n = 0; n < 100; n++) {
            //    table.Rows.Add(n, "row" + n.ToString());
            //}

            return table;
        }

Ссылочные ссылки для повышения производительности элементов управления DevExpress GridView:
Поведение привязки данных сетки по умолчанию не работает для больших наборов данных
ASPxGridView.DataSourceForceStandardPaging Свойство
ASPxGridView - Как реализовать кэширование с использованием классов SqlCacheDependency или SqlDependency
Лучшее решение для ASPxGridView с пользовательскими объектами DataTable
Кэширование данных на стороне клиента
Как кэшировать строки в DevExpress ASP.NET GridView
Проблема производительности в GridView при использовании подкачки и основного подробного представления
Ускорьте загрузку вашей страницы с помощью более легкого ViewState
Время загрузки данных и пользовательская загрузка записей

1 голос
/ 31 мая 2012

Вы можете использовать AfterPerformCallback:

protected void gridSchedule_AfterPerformCallback(object sender,
      DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
{
    LoadGrid(gridSchedule);
}
0 голосов
/ 26 декабря 2011

Использовать ViewState

Шаг 1:

 GridView1.DataSource = ds;
 ViewState["itemsetPending"] = ds;
 GridView1.DataBind();

Шаг 2:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    DataSet m_DataTable = (DataSet)ViewState["itemsetPending"];

    if (m_DataTable != null)
    {
        DataView m_dataview = new DataView(m_DataTable.Tables[0]);

        if (Convert.ToInt32(ViewState["m_sort"]) == 0)
        {
            m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(SortDirection.Descending);
            ViewState["m_sort"] = 1;
        }
        else
        {
            m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
            ViewState["m_sort"] = 0;
        }

        GridView1.DataSource = m_dataview;
        GridView1.DataBind();
    }
}

Здесь я заполняю данные из процедуры хранения в наборе данных и назначаю их во ViewState. Просто попробуйте.

private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
    string newSortDirection = String.Empty;

    switch (sortDirection)
    {
        case SortDirection.Ascending:
            newSortDirection = "ASC";
            break;

        case SortDirection.Descending:
            newSortDirection = "DESC";
            break;
    }

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