2011-01-28 57 views
3

我正在使用DAL,並無法弄清如何對返回的數據表進行排序。此案引發錯誤和智能是不是我提供太多的幫助:ASP.net c#排序數據表

// Get all the specifications available to this user 
Artwork.tblSpecificationsDataTable dsCommon = new Artwork.tblSpecificationsDataTable();    
using (tblSpecificationsTableAdapter specAdapter = new tblSpecificationsTableAdapter()) 
{ 
    specAdapter.FillByClientID(dsCommon, Master.loginData.loggedInUser.company.ID); 
    } 

DataView v = dsCommon.DefaultView; 
v.Sort = "category DESC"; 
dsCommon = (Artwork.tblSpecificationsDataTable)v.ToTable(); 

for (int i = 0; i < dsCommon.Count; i++) 
    { 
    test.Text += dsCommon[i].category + " " + dsCommon[i].FlatSize + "<br />"; 
    } 

錯誤,而不投是:

錯誤3無法隱式轉換類型 「System.Data.DataTable」來 'Artwork.tblSpecificationsDataTable'。 的顯式轉換存在(你 缺少強制轉換?)

編輯

顯然我應該在這是很好的查詢中的排序,但我想爲了通過任何的選擇無需在表格適配器中創建十幾個查詢,我該如何去做這件事?

+0

你爲什麼不在數據庫中排序? – 2011-01-28 13:42:36

+0

我有一個表格適配器,用於讀取行,我想以不同的方式返回行,還有許多排序方法,但不必爲每一行都分別進行查詢。這是錯誤的方式去做? – 2011-01-28 13:43:36

回答

2

它不一定是正確的說,數據庫會比客戶端更快地執行排序 - 在大多數這種情況下,這種說法是正確的,但你必須看SQL Server中的查詢計劃,看看它真的會更快。

你可以寫這樣的查詢,這使得動態排序表中的適配器...

SELECT 
    <field list> 
FROM 
    <TableName> 
WHERE 
    <Clause> 
ORDER BY 
CASE @OrderBy 
    WHEN 'Field1' THEN Field1 
    WHEN 'Field2' THEN Field2 
    WHEN 'Field3' THEN Field3 
END 
2

這是一個猜測。根據MSDN,DataView.ToTable()返回一個新的DataTable。但你傳遞一個到一個現有的變量dsCommon.

有一個非常相似propertyDataView.Table是獲取或設置源DataTableDataView後面。

貴問題消失,如果你改變線路

dsCommon = (Artwork.tblSpecificationsDataTable)v.ToTable(); 

dsCommon = (Artwork.tblSpecificationsDataTable)v.Table();