Как сортировать численно, а не по строке, на Telerik RadGrid ASP.NET Ajax?

У меня есть RadGrid со столбцом Сумма убытка, который я хотел бы отсортировать. В настоящее время он сортируется, но только по строковому значению. У меня есть тип столбца как GridNumericColumn. Как мне это сделать?

Мой код указан ниже. Я также форматирую текст столбца, чтобы показать валюту. Одна вещь, которую я заметил, это то, что я возвращаю строковое значение из метода Format. Может ли это быть причиной?

Столбец:

<rad:GridNumericColumn DataField="Loss Amount"
                       UniqueName="Loss Amount"
                       HeaderText="Loss Amount"
                       SortExpression="Loss Amount" \>
    <HeaderStyle Width="140">
    <ItemStyle Width="140" HorizontalAlign="Right"ForeColor="Maroon" />
</rad:GridNumericColumn>`

Событие NeedDataSource:

protected void grdCustomerAssignments_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    GetAssignments();
    grdCustomerAssignments.DataSource = Assignments;
}

private void GetAssignments()
{
    if (Assignments == null)
        Assignments = new DataTable();

    SPList list = SPContext.Current.Web.Lists["Listings"];
    SPView view = GetCustomerView();
    SPListItemCollection items = list.GetItems(view);

    Assignments = items.GetDataTable();

    foreach (DataColumn column in Assignments.Columns)
    {
        column.ColumnName = XmlConvert.DecodeName(column.ColumnName);
    }

    Assignments.AcceptChanges();
}

Событие ItemDataBound:

protected void grdCustomerAssignments_ItemDataBound(object sender, GridItemEventArgs e)
{
    FormatCurrency(item["Loss Amount"].Text);
}

protected string FormatCurrency(string text)
{
    if (text.Length > 3)
    {
        string result = String.Empty;
        char[] tmpArray = text.ToCharArray();
        Array.Reverse(tmpArray);
        string tmpString = new String(tmpArray);

        while (tmpString.Length > 3)
        {
            string threeChars = tmpString.Substring(0, 3);
            result = String.Concat(result, threeChars, ",");
            tmpString = tmpString.Remove(0, 3);
        }

        result = String.Concat(result, tmpString);
        tmpArray = result.ToCharArray();
        Array.Reverse(tmpArray);
        text = new String(tmpArray);
    }
    return String.Concat("$ ", text);
}

person jhorton    schedule 01.02.2010    source источник
comment
Можете ли вы опубликовать свой код привязки и разметку GridNumericColumn?   -  person Bob    schedule 01.02.2010


Ответы (1)


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

person Dick Lampard    schedule 01.02.2010
comment
Пробовал редактировать, никаких исключений не было. Хотя запятая в значении все же стоит. Разве это не сделало бы его строковым значением? - person jhorton; 01.02.2010
comment
Вы подтвердили, что исходное поле имеет числовой тип? Если вы просматриваете таблицу назначений, отображается ли сумма убытков в виде числового поля? - person Phil; 28.03.2015