GridView становится NULL после сортировки? - PullRequest
1 голос
/ 09 мая 2011

Я запускаю этот обработчик событий и метод для сортировки моего GridView, но он говорит, что он нулевой:

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dtSortTable = gvMeldingen.DataSource as DataTable;

            DataView dvSortedView = new DataView(dtSortTable);
            dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection);
            gvMeldingen.DataSource = dvSortedView;
            gvMeldingen.DataBind();

    }
    private string getSortDirectionString(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        if (sortDirection == SortDirection.Ascending)
        {
            newSortDirection = "ASC";
        }
        else
        {
            newSortDirection = "DESC";
        }
        return newSortDirection;
    }

Пожалуйста, помогите мне. Заранее спасибо!

Это ошибка, которую я получаю: DataTable должен быть установлен до использования DataView.

И это выделено: dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Свойство DataSource теряется во время обходов. Вот почему DataTable dtSortTable = gvMeldingen.DataSource as DataTable; равно нулю, а DataView dvSortedView = new DataView(dtSortTable); недопустимо.

Когда вы нажимаете гиперссылку сортировки в таблице данных, вы запускаете обратную передачу от клиента к серверу. Затем ASP.NET создает страницу ответа, используя постоянные данные, такие как ViewState и другие.

Свойство DataSource не является частью постоянного состояния между приемом в оба конца, поэтому его значение теряется.

Решение требует вашего источника данных, как показано ниже:

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        var SortExpression = e.SortExpression + " " + getSortDirectionString(e.SortDirection);

        gvMeldingen.DataSource = ... // Requery the Data using the new sort expression above
        gvMeldingen.DataBind();
    }

Другим решением является установка источника данных каждый раз в событии Page_Load (не рекомендуется)

0 голосов
/ 09 мая 2011

Когда вы ставите DataView вокруг DataTable, метод будет работать только в первый раз (при условии, что источником данных является DataTable от начала).В следующий раз источником данных будет DataView, и вы не сможете привести его к DataTable.

. Использовать стандартное представление DataTable в качестве источника данных с самого начала, чтобы источник данныхвсегда DataView.Затем вы можете получить представление из источника и получить базовую таблицу из этого:

DataView view = gvMeldingen.DataSource as DataView;
DataTable dtSortTable = view.Table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...