我有一個DataBound GridView。不過,我有一列的值來自代碼背後的計算 - 它顯示在TemplateField中。ASP.NET GridView排序計算字段
如何根據此計算值對我的網格進行排序?
我有一個DataBound GridView。不過,我有一列的值來自代碼背後的計算 - 它顯示在TemplateField中。ASP.NET GridView排序計算字段
如何根據此計算值對我的網格進行排序?
將您最初返回的數據放入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;
一種可能的解決方案是填充數據表,而不是綁定網格。然後使用數據視圖,將排序設置爲您的計算列,然後將其綁定到後面的代碼中的網格。
另一種解決方案是要考慮的是將計算的列到數據庫表本身。這有利於將計算列返回到加載行其餘部分的相同SQL表達式中,但不幸的是確實需要更改數據庫模式。
請注意,將數據列添加到數據表中會將所有行標記爲已更新,因此當保存回數據庫時,它將嘗試更新所有記錄。
我把它放到選擇查詢 - 謝謝 – 2009-01-06 11:06:11
還有另一種方法來做到這一點。您可以按照@Stephen正確建議的方式將列添加到`DataTable`中,但如果需要使用DataTable的其他列計算新列作爲表達式,則不需要遍歷所有行。您可以簡單地使用`DataTable dt = GetDataTableFromDataBaseMethod();`然後,作爲示例,`dt.Columns.Add(「CalculatedColumnName」,typeof(double),「(FirstValueColumn - SecondValueColumn)* ThirdValueColumn」);`。如果不能直接將表達式添加到查詢中,這可能非常有用,反正總是最好的選擇。 – 2014-03-18 09:54:48