Я провел большую часть своего дня, борясь с GridView.Sort ().
Ничто из того, что я сделал, не могло заставить меня вести себя так, как я ожидал. Только когда коллега сказал мне, что в выражении вы можете указать порядок сортировки для каждого термина (кроме последнего, очевидно).
Какова цель предоставления направления сортировки, если оно применяется только к последнему члену в выражении, содержащем несколько терминов? Например:
GridView.Sort("Foo,Bar", SortDirection.Descending);
Термин «Foo» в этом выражении всегда будет сортироваться в порядке возрастания, в то время как термин «Bar» имеет порядок сортировки, определяемый параметром SortDirection функции Sort (). Тем не менее:
GridView.Sort("Foo DESC,Bar" SortDirection.Ascending);
Термин «Foo» теперь будет сортироваться по убыванию, а «Bar» - по возрастанию. Я наткнулся на это поведение после подсказки от моего коллеги, когда я попробовал это:
GridView.Sort("Foo DESC, Bar DESC", SortDirection.Descending);
Было сгенерировано исключение с жалобой на невозможность найти столбец "Bar DESC"; это привело меня к мысли, что такие выражения на самом деле недопустимы. Однако мне было любопытно, почему не было выдано исключение для «Foo DESC» (поскольку оно было указано первым), поэтому я попробовал следующее:
GridView.Sort("Foo DESC, Bar", SortDirection.Descending);
И наконец увидел желаемое поведение.
Похоже, что мне придется строить строку выражения вручную, поскольку порядок сортировки, который мне нужен, будет зависеть от пользовательского ввода для термина "Foo", но останется неизменным для термина "Bar". Во всех поисках я не нашел ссылки на это поведение. Теперь, когда я понимаю, как это работает, имеет смысл, что первый член всегда возрастает, если не указано иное. Но почему бы не покончить со вторым параметром в Sort () и просто оставить порядок (asc / desc) в выражении?