У меня есть DataBound GridView. Однако у меня есть один столбец, в котором значение получено из расчета в коде позади - оно отображается в TemplateField.
Как можно отсортировать мою сетку на основе этого вычисленного значения?
У меня есть DataBound GridView. Однако у меня есть один столбец, в котором значение получено из расчета в коде позади - оно отображается в TemplateField.
Как можно отсортировать мою сетку на основе этого вычисленного значения?
Поместите исходные возвращенные данные в 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;
DataTable
, как правильно предложил @Stephen, но затем, если вам нужно вычислить новый столбец как выражение, используя другие столбцы DataTable
, вам не нужно перебирать все строки. Вы можете просто использовать DataTable dt = GetDataTableFromDataBaseMethod();
, а затем, например, dt.Columns.Add("CalculatedColumnName", typeof(double), "(FirstValueColumn - SecondValueColumn) * ThirdValueColumn");
. Это может быть очень полезно, если вы не можете напрямую добавить свое выражение в запрос, что в любом случае всегда является лучшим выбором.
- person Cheshire Cat; 18.03.2014
Одним из возможных решений было бы заполнить таблицу данных вместо привязки сетки. Затем используйте представление данных с сортировкой, установленной для вашего вычисляемого столбца, и привяжите его к сетке в коде позади.
Другим решением, которое следует рассмотреть, является добавление вычисляемого столбца в саму таблицу базы данных. Преимущество этого заключается в том, что вычисляемый столбец возвращается в том же выражении SQL, которое загружает остальную часть строки, но, к сожалению, требует изменения схемы базы данных.
Обратите внимание, что добавление столбца в таблицу данных помечает все строки как обновленные, поэтому при сохранении обратно в базу данных он попытается обновить все записи.