Ste*_*ger 10 c# vb.net sorting datatable gridview-sorting
我需要通过一个字符串值的列对DataTable或DataGridView进行排序,但在排序ASCENDING时在BOTTOM中使用null/empty值.
DataTable没有填充SQL语句,因此没有订单.
如果我做
DataGridView1.Sort(New RowComparer(System.ComponentModel.ListSortDirection.Ascending))
Run Code Online (Sandbox Code Playgroud)
然后它抛出一个异常,说DataGridView是DataBound,这是正确的,但对我没有帮助,我想保持它的数据绑定.
它是.NET 2.0,这意味着没有LINQ可用!
在某些情况下,如果表中还有另一列,则可以执行此操作:
SELECT completed, completed IS NULL AS isnull
FROM TABLE
ORDER BY isnull DESC, completed DESC
Run Code Online (Sandbox Code Playgroud)
编辑:
在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"
Run Code Online (Sandbox Code Playgroud)
Davide Piras有一个很好的解决方案,但是我有另一个最简单的解决方案
添加一个新列,只需一行即可完成
// 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();
Run Code Online (Sandbox Code Playgroud)