2008-12-24 110 views

回答

7

將您最初返回的數據放入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

我把它放到選擇查詢 - 謝謝 – 2009-01-06 11:06:11

+0

還有另一種方法來做到這一點。您可以按照@Stephen正確建議的方式將列添加到`DataTable`中,但如果需要使用DataTable的其他列計算新列作爲表達式,則不需要遍歷所有行。您可以簡單地使用`DataTable dt = GetDataTableFromDataBaseMethod();`然後,作爲示例,`dt.Columns.Add(「CalculatedColumnName」,typeof(double),「(FirstValueColumn - SecondValueColumn)* ThirdValueColumn」);`。如果不能直接將表達式添加到查詢中,這可能非常有用,反正總是最好的選擇。 – 2014-03-18 09:54:48

0

一種可能的解決方案是填充數據表,而不是綁定網格。然後使用數據視圖,將排序設置爲您的計算列,然後將其綁定到後面的代碼中的網格。

0

另一種解決方案是要考慮的是將計算的列到數據庫表本身。這有利於將計算列返回到加載行其餘部分的相同SQL表達式中,但不幸的是確實需要更改數據庫模式。

0

請注意,將數據列添加到數據表中會將所有行標記爲已更新,因此當保存回數據庫時,它將嘗試更新所有記錄。