2010-02-02 47 views
0
创建数据表中的排序表达式

我有一个DataTable,其中包含许多列,其中三个是主要的:请帮我在vb.net

  1. hotelid
  2. dshotelid
  3. hotelname

某些酒店只包含dshotelid,有些酒店只包含hotelid,有些包含dshotelid和hotelid。

我需要那种以这样的方式让那些谁得到这两个dshotelid和hotelid酒店应该是在上面,然后将这些谁只已经得到酒店dshotelid,最后那些谁只拿到了hotelid酒店...

请帮我创建这样的表达式。

我创造了这个:

dtmaintable.DefaultView.Sort = "dshotelid, hotelid" 

但它没有给我所需的输出。

+0

尝试在此之前的问题:HTTP://计算器。com/questions/582374/dataview-sort-more-just-asc-desc-need-custom-sort – roufamatic 2010-02-02 07:29:00

+0

其不工作 – 2010-02-02 07:44:01

+0

您是否看到过我的回复尚未解决您的FilterAndSortTable解决方案?请参阅下面我的答案的编辑部分.. – GenericMeatUnit 2010-02-05 21:48:35

回答

0

我得到了答案的:

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 
+0

以及它给我期望的输出,但是,请检查它并确认我,我确实是否正确... – 2010-02-02 10:25:30

+0

我已经赞扬了我以前的答案,谈论这个解决方案。 – GenericMeatUnit 2010-02-04 10:27:08

1

其中有NULL的字段倾向于出现在有序列的顶部(除非排序按降序排列),因此您可能会在底部看到既有hotelid又有dshotelid的行,而不是顶部?

这个数据表是如何填充的?如果它来自数据库查询,那么构建一个包含您需要的任何排序键的附加列(或多个列)是一件简单的事情 - 无论它是其他列的合并还是其他唯一标识符。

编辑:2010年2月4日 - 响应你的“FilterAndSortTable”解决方案:

您的解决方案作品,但它不是因为FilterAndSortTable的 - 这是因为我们使用了不同的排序顺序。

最初,您使用“dsohtelid,hotelid”。

第二次,您使用“dshotelid desc,hotelid desc”。

这样做的效果是将您的非空值置于顶端,而将空值置于底部,但是我认为这是一个很好的解决方案。 你的ID现在向后排序 - 我认为你可能想避免这种情况,因此我提出了一个新的排序列的建议,它会尊重这一点。

不过,如果ID的顺序并不重要,那么您的解决方案是好的,你可以简单地坚持你的原代码,添加的“递减”,就像这样:

dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc" 

当然,如果我在这里说的任何东西对你有任何用处,都会非常感谢。这将帮助我达到50个重要点,并最终能够写评论。 :)

+0

谢谢,但..它没有解决我的问题 – 2010-02-02 07:50:19

+0

ID的顺序是无关紧要的....我的解决方案工作正常 – 2010-02-06 03:30:38

+0

感谢您的upvote。 :) – GenericMeatUnit 2010-02-06 22:00:00