ASP.NET GridView сортировка по вычисляемому полю - PullRequest
1 голос
/ 24 декабря 2008

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

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

Ответы [ 4 ]

7 голосов
/ 24 декабря 2008

Поместите ваши первоначальные возвращенные данные в 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, повторно:

SELECT Col1, Col2, Col3, Col1+Col2+Col3 AS LineTotal FROM Table; 
0 голосов
/ 13 мая 2009

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

0 голосов
/ 02 апреля 2009

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

0 голосов
/ 24 декабря 2008

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

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