繁体   English   中英

请帮助我在vb.net中为datatable创建排序表达式

[英]please help me in creating a sort expressions for datatable in vb.net

我有一个数据表,其中包含许多列,其中三列是主要的:

  1. hotelid
  2. dshotelid
  3. 酒店名称

一些酒店仅包含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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM