помогите пожалуйста в создании сортировки выражений для datatable в vb.net - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть таблица данных, которая содержит много столбцов, в которых три являются основными:

  1. hotelid
  2. dshotelid
  3. 1008 * Название отеля *

В некоторых отелях содержится только dshotelid, в некоторых - только hotelid, а в некоторых - dshotelid и hotelid.

Мне нужно сортировать таким образом, чтобы те отели, которые получили как dshotelid, так и hotelid, были на первом месте, а затем те отели, которые получили только dshotelid и, наконец, те отели, которые получили только hotelid ...

Пожалуйста, помогите мне создать такое выражение сортировки.

Я создал это:

dtmaintable.DefaultView.Sort = "dshotelid, hotelid"

но это не дает мне желаемого результата.

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Поля с NULL в них имеют тенденцию появляться вверху отсортированных столбцов (если сортировка не в порядке убывания), поэтому вы, вероятно, видите строки с отелем и dshotelid внизу, а не сверху?

Как заполняется эта таблица данных? Если он исходит из запроса к базе данных, достаточно просто создать дополнительный столбец (или столбцы), которые будут содержать любой необходимый вам ключ сортировки - будь то объединение других столбцов или какой-либо другой уникальный идентификатор.

РЕДАКТИРОВАТЬ: 4 февраля 2010 г. - в ответ на ваше решение FilterAndSortTable:

Ваше решение работает, но не из-за FilterAndSortTable, а потому, что вы использовали другой порядок сортировки.

Первоначально вы использовали "dsohtelid, hotelid".

Во второй раз вы использовали "dshotelid desc , hotelid desc ".

Это приводит к тому, что ваши ненулевые значения помещаются вверху, а нулевые - внизу, но я бы поспорил, что это квалифицируется как хорошее решение. Теперь ваши идентификаторы отсортированы в обратном направлении - я предположил, что вы, возможно, захотите этого избежать, поэтому я предложил новый столбец сортировки, который бы учитывал это.

Тем не менее, если порядок идентификаторов не имеет значения, тогда ваше решение в порядке, и вы можете просто придерживаться своего исходного кода, добавив «desc», например:

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

Конечно, если что-то, что я здесь сказал, было для вас полезным, галочка была бы очень признательна. Это помогло бы мне набрать 50 очков и, наконец, написать комментарии. :)

0 голосов
/ 02 февраля 2010

я получил ответ:

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...