Поля с NULL в них имеют тенденцию появляться вверху отсортированных столбцов (если сортировка не в порядке убывания), поэтому вы, вероятно, видите строки с отелем и dshotelid внизу, а не сверху?
Как заполняется эта таблица данных? Если он исходит из запроса к базе данных, достаточно просто создать дополнительный столбец (или столбцы), которые будут содержать любой необходимый вам ключ сортировки - будь то объединение других столбцов или какой-либо другой уникальный идентификатор.
РЕДАКТИРОВАТЬ: 4 февраля 2010 г. - в ответ на ваше решение FilterAndSortTable:
Ваше решение работает, но не из-за FilterAndSortTable, а потому, что вы использовали другой порядок сортировки.
Первоначально вы использовали "dsohtelid, hotelid".
Во второй раз вы использовали "dshotelid desc , hotelid desc ".
Это приводит к тому, что ваши ненулевые значения помещаются вверху, а нулевые - внизу, но я бы поспорил, что это квалифицируется как хорошее решение.
Теперь ваши идентификаторы отсортированы в обратном направлении - я предположил, что вы, возможно, захотите этого избежать, поэтому я предложил новый столбец сортировки, который бы учитывал это.
Тем не менее, если порядок идентификаторов не имеет значения, тогда ваше решение в порядке, и вы можете просто придерживаться своего исходного кода, добавив «desc», например:
dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc"
Конечно, если что-то, что я здесь сказал, было для вас полезным, галочка была бы очень признательна. Это помогло бы мне набрать 50 очков и, наконец, написать комментарии. :)