[英]please help me in creating a sort expressions for datatable in vb.net
我有一个数据表,其中包含许多列,其中三列是主要的:
一些酒店仅包含dshotelid,一些仅包含hotelid,而一些同时包含dshotelid和hotelid。
我需要以这样的方式进行排序,以便同时拥有dshotelid和hotelid的那些酒店应该排在最前面,然后只有dshotelid的那些酒店以及最后那些仅具有hotelid的酒店……
请帮助我创建这样的排序表达式。
我创建了这个:
dtmaintable.DefaultView.Sort = "dshotelid, hotelid"
但是它没有给我想要的输出。
其中带有NULL的字段通常会出现在已排序的列的顶部(除非排序按降序排列),因此您可能会看到底部(而不是顶部)同时有hotelid和dshotelid的行?
该数据表如何填充? 如果它来自数据库查询,那么构造一个额外的列(包含所需的任何排序键)就很简单了,它可以是其他列的集合或其他唯一标识符。
编辑:2010年2月4日-回应您的'FilterAndSortTable'解决方案:
您的解决方案有效,但这不是因为FilterAndSortTable而是因为您使用了不同的排序顺序。
最初,您使用的是“ dsohtelid,hotelid”。
第二次,您使用了“ dshotelid desc ,hotelid desc ”。
这样可以将非null放在顶部,而null放在底部,但是我会怀疑这是一个很好的解决方案。 您的ID现在已向后排序-我以为您可能想避免这种情况,因此,我建议您使用一个新的排序列,以尊重这一点。
不过,如果id的顺序无关紧要,那么您的解决方案就可以了,您可以简单地坚持使用原始代码,并加上'desc',如下所示:
dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc"
当然,如果我在这里所说的任何事情对您有用,那么不胜感激。 这将帮助我达到50个代表点,并最终能够发表评论。 :)
我得到的答案是:
datagrid1.datasource = FilterandSortTable(dtmaintable,"", "dshotelid desc, hotelid desc")
Public Shared Function FilterandSortTable(ByVal SourceTable As DataTable, ByVal strFilters As String, Optional ByVal strOrder As String = "") As DataTable
Dim Tbl As DataTable = SourceTable.Clone
Dim rows() As DataRow = SourceTable.Select(strFilters, strOrder)
For i As Integer = 0 To rows.Length - 1
Tbl.ImportRow(rows(i))
Next
Return Tbl
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.