对DataTable字符串列进行排序,但底部为null / empty

时间:2011-02-07 12:00:48

标签: c# vb.net sorting datatable gridview-sorting

我需要通过一个字符串值的列对DataTable或DataGridView进行排序,但在排序ASCENDING时在BOTTOM中使用null / empty值。

DataTable没有填充SQL语句,因此没有按顺序填充。

如果我这样做

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

然后它抛出一个异常,说DataGridView是DataBound,这是正确的,但没有帮助我,我想保持它数据绑定。

它是.NET 2.0,这意味着没有可用的LINQ!

3 个答案:

答案 0 :(得分:7)

在某些情况下,如果表中还有另一列,则可以执行此操作:

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



编辑:
在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"

答案 1 :(得分:7)

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();

答案 2 :(得分:0)

即使绑定到用户界面控件DataGridView的DataTable没有通过SQL填充,您仍然可以使用DataView对其进行排序,您可以这样做:

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

然后你做绑定。

它是如何工作的?空值是在顶部还是在底部?