сортировка по сетке не работает для чисел - PullRequest
2 голосов
/ 18 декабря 2009

Я реализовал функцию сортировки в моем коде, она отлично работает со словами, но не с числами ... например,

4,693 
1,494  
23

когда я сортирую это, я получаю

> 1,494
> 23
> 4,693

значит, это просто проверка первого номера ....

мой код для сортировки:

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (IsPostBack)
        {
            DataTable dt = Session["TaskTable"] as DataTable;

            if (dt != null)
            {

                //Sort the data.
                dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
                GridView1.DataSource = Session["TaskTable"];
                GridView1.DataBind();
            }
        }
        else
        {
            Response.Redirect("~/Reports1mod.aspx");
        }

    }

    private string GetSortDirection(string column)
    {
        // By default, set the sort direction to ascending.
        string sortDirection = "ASC";

        // 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 = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

Ответы [ 4 ]

3 голосов
/ 18 декабря 2009

Как уже было сказано, вы связали столбец со строкой, чтобы получить эти запятые?

Необходимо разрешить привязку столбца к значению int и установить для DataFormatString значение "{0: N}" для чисел с разделителем групп. (См. Свойство BoundField.DataFormatString )

3 голосов
/ 18 декабря 2009

Это происходит при сортировке чисел как строк .

Сортирует строку слева направо , что в вашем случае 2 в 23 раньше 4 .

2 голосов
/ 18 декабря 2009

Похоже, что он сортирует числа в виде строк - т.е. в алфавитном порядке, а не в числовом порядке. Я не могу понять, где находится ваш фактический столбец / значение, не могли бы вы окружить его каким-то образом приведением / преобразованием в целое число?

0 голосов
/ 17 ноября 2015

У меня тоже была эта проблема после обращения к странице MSDN для быстрого обучения: https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting(v=vs.110).aspx

Все, что вам нужно сделать, это указать тип столбца TableData со вторым параметром:

   //To allow sorting numerically, add type param to column
   table1.Columns.Add("GridTest ID", typeof(Int32));

Надеюсь, это полезно кому-то еще.

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