2011-02-07 29 views
9

我需要排序DataTable或DataGridView的字符串值的列,但在排序ASCENDING時在底部有空值/空值。排序DataTable字符串列,但在底部爲空/空

DataTable不是由SQL語句填充的,所以沒有按順序填充。

如果我做

DataGridView1.Sort(New RowComparer(System.ComponentModel.ListSortDirection.Ascending)) 

那麼它拋出一個異常,說在DataGridView是數據綁定,這是正確的,但並不能幫助我,我想保持它的數據綁定。

它的.NET 2.0,這意味着沒有LINQ可用!

回答

8

在某些情況下,你可以這樣做,如果你在你的表中的另一個額外的列:在VB.NET

 For Each srSearchResult In srcSearchResultCollection 

      Try 
       dr = dt.NewRow() 
       dr("cn") = srSearchResult.GetDirectoryEntry().Properties("cn").Value 
       dr("Account") = srSearchResult.GetDirectoryEntry().Properties("sAMAccountName").Value 
       dr("Nachname") = srSearchResult.GetDirectoryEntry().Properties("sn").Value 
       dr("Vorname") = srSearchResult.GetDirectoryEntry().Properties("givenname").Value 
       dr("Mail") = srSearchResult.GetDirectoryEntry().Properties("mail").Value 
       dr("HomeDirectory") = srSearchResult.GetDirectoryEntry().Properties("homedirectory").Value 
       dr("LogonScript") = srSearchResult.GetDirectoryEntry().Properties("scriptPath").Value 

       dr("IsNull") = String.IsNullOrEmpty(dr("Nachname").ToString()) 

       dt.Rows.Add(dr) 
      Catch ex As Exception 

      End Try 

     Next srSearchResult 
dt.DefaultView.Sort = "IsNull ASC, Nachname ASC" 
0

即使你綁定到用戶界面控件DataGridView中的數據表是不通過SQL填充,您可以使用數據視圖,你可以做這樣的事情還是對它進行排序:

DataView myView = myDataTable.DefaultView; 
myView,Sort = "yourColumnName ASC"; 

那麼你做你的綁定。

它是如何工作的?是頂部還是底部的空值?

+0

是的,但它不會將空值/空值放在底部。 – 2011-02-07 12:13:09

+0

@Waqas Raja:確實!這就是我的問題...... – 2011-02-07 12:37:16

7

達維德Piras酒店
像這樣:

SELECT completed, completed IS NULL AS isnull 
FROM TABLE 
ORDER BY isnull DESC, completed DESC 



編輯有一個很好的解決方案,但是我有另一個最簡單的解決方案

添加一個新列,並在一行中執行它

// just, add a new column 
ActualDataTable.Columns.Add("NullEmptyCheck", typeof(int), "ColumnNameToSort is Null OR ColumnNameToSort = ''"); 

// apply sort expression 
ActualDataTable.DefaultView.Sort = "NullEmptyCheck asc, ColumnNameToSort asc"; 
// pass datasource to grid 
MyGridView.DataSource = ActualDataTable.DefaultView; 
MyGridView.DataBind();