Как сохранить состояние сортировки GridView? (По возрастанию, по убыванию) - PullRequest
1 голос
/ 21 мая 2011

У меня есть проблема, которая меня долго мучила, и я остро нуждаюсь в помощи, потому что я новичок в .NET.

Я использую GridView для отображения запросаРезультаты.Однако вместо того, чтобы вводить его непосредственно в источник данных сущности / LINQ, я вручную кодирую такие события, как Загрузка, Сортировка и Пейджинг.Проблема в сортировке, я не могу сохранить восходящее / нисходящее состояние.Одним из возможных решений, которое я могу придумать, является кэширование состояния, однако я чувствую, что есть другой способ, который более опрятен.Таким образом, вы, ребята, можете предложить мне другие идеи, которые подходят лучше?

Заранее большое спасибо!Ниже приведен код, который я использую для сортировки.Очевидно, что e.SortDirection всегда будет равняться ascending независимо от того, сколько раз я нажал на заголовок столбца.

switch (e.SortExpression)
        {
            case "Album":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.DocumentAlbum.Name ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.DocumentAlbum.Name descending
                                     select doc;
                break;
            case "Category":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.DocumentCategory.Name ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.DocumentCategory.Name descending
                                     select doc;
                break;
            case "Title":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.Title ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.Title descending
                                     select doc;
                break;
            case "Description":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.Description ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.Description descending
                                     select doc;
                break;
            case "DateCreated":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.DateCreated ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.DateCreated descending
                                     select doc;
                break;
            case "DateUpdated":
                if (e.SortDirection == SortDirection.Ascending)
                    _orderedResult = from doc in _result
                                     orderby doc.DateUpdated ascending
                                     select doc;
                else
                    _orderedResult = from doc in _result
                                     orderby doc.DateUpdated descending
                                     select doc;
                break;

        }

Ответы [ 3 ]

1 голос
/ 22 мая 2011

На самом деле, я только что нашел ответ.Я использовал функцию ViewState, чтобы отслеживать состояние.Это функция, которую я использовал:

private SortDirection GetSortDirection(string column)
    {
        // By default, set the sort direction to ascending
        SortDirection _sortDirection = SortDirection.Ascending;

        // Retrieve the last column that was sorted
        string _sortExpression = ViewState["SortExpression"] as string;

        if (_sortExpression != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (_sortExpression == column)
            {
                string _lastDirection = ViewState["SortDirection"] as string;
                if ((_lastDirection != null) && (_lastDirection == "ASC"))
                {
                    _sortDirection = SortDirection.Descending;
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection"] = _sortDirection.ToString();
        ViewState["SortExpression"] = column;

        return _sortDirection;
    }
0 голосов
/ 11 июля 2014

Если вы используете LINQ, то сортировать очень просто просто привязать сетку, как это

var data = (from d in edc.TableName
                select new
                {
                    d.Address,
                    d.InsertedDate,                        
                    d.ID
                }).OrderByDescending(d => d.ID);
    if (data != null)
    {
        grdList.DataSource = data;
        grdList.DataBind();
    }
0 голосов
/ 23 мая 2012
protected void gvOfflineSub_Sorting(object sender, GridViewSortEventArgs e)
    {
        IList<SellerDetails> Ilist = gvOfflineSub.DataSource as IList<SellerDetails>;
        DataTable dt = ToDataTable<SellerDetails>(Ilist);
        if (dt != null)
        {
            DataView dataView = new DataView(dt);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);

            gvOfflineSub.DataSource = dataView;
            gvOfflineSub.DataBind();
        }
    }

    /// <summary>
    /// Description:Following Method is for Sorting Gridview.
    /// </summary>
    /// <param name="sortDirection"></param>
    /// <returns></returns>
    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, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...