Сортировка ASP.NET GridView по вычисляемому полю

У меня есть DataBound GridView. Однако у меня есть один столбец, в котором значение получено из расчета в коде позади - оно отображается в TemplateField.

Как можно отсортировать мою сетку на основе этого вычисленного значения?


person Tom Carter    schedule 24.12.2008    source источник


Ответы (4)


Поместите исходные возвращенные данные в DATASET или DATATABLE. Добавьте в DATATABLE новый столбец для вычисляемого поля. Обошел эти данные, выполнив необходимые вычисления и поместив результат в указанное вычисляемое поле.

Создайте новое представление на основе таблицы данных и отсортируйте представление по вычисляемому полю. Привяжите сетку к представлению данных.

Dim DT as DataTable 
DT = GetDataTableFromDataBaseMethod()
DT.Columns.Add(New DataColumn("CalculatedColumnName"))
For each row as DataRow in DT.Rows
    row("CalculatedColumnName") = PerformCalculations(row)
Next 

Dim view as New DataView 
view.DataTable =dt 
View.Sort = "CalculatedColumnName DESC"

datagrid1.Datasource = view
datagrid1.Databind 

Или, если возможно, выполните расчет в операторе SQL, re:

SELECT Col1, Col2, Col3, Col1+Col2+Col3 AS LineTotal FROM Table; 
person Stephen Wrighton    schedule 24.12.2008
comment
Есть еще один способ сделать это. Вы можете добавить столбец в DataTable, как правильно предложил @Stephen, но затем, если вам нужно вычислить новый столбец как выражение, используя другие столбцы DataTable, вам не нужно перебирать все строки. Вы можете просто использовать DataTable dt = GetDataTableFromDataBaseMethod();, а затем, например, dt.Columns.Add("CalculatedColumnName", typeof(double), "(FirstValueColumn - SecondValueColumn) * ThirdValueColumn");. Это может быть очень полезно, если вы не можете напрямую добавить свое выражение в запрос, что в любом случае всегда является лучшим выбором. - person Cheshire Cat; 18.03.2014

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

person wulimaster    schedule 24.12.2008

Другим решением, которое следует рассмотреть, является добавление вычисляемого столбца в саму таблицу базы данных. Преимущество этого заключается в том, что вычисляемый столбец возвращается в том же выражении SQL, которое загружает остальную часть строки, но, к сожалению, требует изменения схемы базы данных.

person Frank Schwieterman    schedule 02.04.2009
comment
Да, я делаю это в местах, где стоит сохранять данные, но это было в определенном месте, и я не хотел менять схему. - person Tom Carter; 03.04.2009

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

person Anonymous    schedule 13.05.2009