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

tl; dr
LocalDate.parse(
    "23-Mar-2017" ,
    DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) 
)

Избегать устаревших классов времени и времени

Вопрос и другие ответы устарели, используя неприятные старые классы времени, которые теперь являются устаревшими, вытесненными классами java.time.

Использование java.time

Кажется, что вы имеете дело только с значениями даты. Поэтому не используйте класс даты и времени. Вместо этого используйте LocalDate. Класс LocalDate представляет значение даты только без времени и без часовой пояс.

Укажите Locale , чтобы определить (а) человеческий язык для перевода имени дня, названия месяца и т. д. и (б) культурных норм, решающих вопросы сокращения, капитализации, пунктуации, разделителей и т. д.

string.

String input = "23-Mar-2017" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f );

Сгенерировать строку.

String output = ld.format( f );

Если вам дали цифры, а не текст для года, месяца и дня месяца, используйте LocalDate.of.

LocalDate ld = LocalDate.of( 2017 , 3 , 23 );  // ( year , month 1-12 , day-of-month )

См. этот код запуска кода в режиме реального времени на IdeOne.com .

input: 23-Mar-2017

ld.toString (): 2017-03-23 ​​

output: 23-Mar-2017

blockquote>

О java.time

Рамка java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые классы времени legacy , такие как java.util.Date , Calendar и & amp; SimpleDateFormat .

Проект Joda-Time , теперь в режиме обслуживания , советует перейти на java.time .

Чтобы узнать больше, см. учебник Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация JSR 310 .

Используя драйвер JDBC , совместимый с JDBC 4.2 или более поздней версией, вы можете обменять java.time напрямую с вашей базой данных. Нет необходимости в строках или java.sql. * Classes.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 и более поздние версии. Часть стандартного Java API с интегрированной реализацией. Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7 Большая часть функций java.time портирована на Java 6 & amp; 7 в ThreeTen-Backport .
  • Android Более поздние версии реализаций пакетов Android для классов java.time. Для более раннего Android проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP ... .

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval , YearWeek , YearQuarter и more .

5
задан John Hunter 27 August 2008 в 11:19
поделиться

7 ответов

При использовании DataTable можно использовать (DataTable. DefaultView) DataView. Свойство Sort. Для большей гибкости можно использовать компонент BindingSource. BindingSource будет DataSource Вашего поля комбинированного списка. Затем можно изменить источник данных от DataTable для Списка, не изменяя DataSource поля комбинированного списка.

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

7
ответ дан 13 December 2019 в 19:40
поделиться

Можно на самом деле отсортировать представление по умолчанию о DataTable:

myDataTable.DefaultView.Sort = "Field1, Field2 DESC";

Это отсортирует любые строки, которые Вы получаете непосредственно от DataTable.

2
ответ дан 13 December 2019 в 19:40
поделиться

Данные должны быть в DataTable? Используя SortedList и привязку, которая к полю комбинированного списка была бы более простым путем.

Если необходимо использовать DataTable, можно использовать Избранный метод, чтобы получить DataView и передать в параметре вида.

DataView dv = myDataTable.Select("filter expression", "sort");
0
ответ дан 13 December 2019 в 19:40
поделиться

Самый простой способ отсортировать ComboBox состоит в том, чтобы использовать ComboBox. Свойство Sorted. Однако это не будет работать при использовании привязки данных. В этом случае необходимо будет отсортировать сам источник данных.

Можно использовать или SortedList или SortedDictionary (оба вида Ключом), или DataView.

DataView имеет свойство Sort, которое принимает выражение для сортировки (строка), например:

view.Sort = "State, ZipCode DESC";

В вышеупомянутом примере и состояние и ZipCode являются столбцами в DataTable, используемом для создания DataView.

0
ответ дан 13 December 2019 в 19:40
поделиться

Удостоверьтесь, что Вы связываете DefaultView с Источником данных Средств управления после установки свойства Sort а не таблицы:

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
1
ответ дан 13 December 2019 в 19:40
поделиться

Я понимаю, что Вы уже выбрали свой ответ на этот вопрос, но я предложил бы разместить DataView в Вашу форму, связав его с Вашим Набором данных/Таблицей данных и установкой вида на Представлении в разработчике. Вы затем связываете свое поле комбинированного списка с DataView, а не Набор данных/Таблицу данных.

0
ответ дан 13 December 2019 в 19:40
поделиться

У Джоша Смита есть запись в блоге , которая отвечает на этот вопрос и делает все это в XAML.

1
ответ дан 13 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: