WPF DataGrid / Список пользовательских сортировок и критериев

#c# #list #wpfdatagrid

#c# #Список #wpfdatagrid

Вопрос:

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

     Code Product     Weight
    008  811         10.0
    008  842         12.0
    I008 852         8.0
    008  N/A         0.0
    I008 ALL Version 0.516
    VAL  N/A         1.0
  

Как мне отсортировать это на основе следующих правил

  • Все, что в продукте = N / A, должно быть в верхней части
  • Все в коде, начинающемся с буквы I, идет в самый низ
  • Все остальное просто сортируйте по коду

Итак, приведенная выше таблица хотела бы этого.

     Code Product     Weight
    008  N/A         0.0
    VAL  N/A         1.0
    008  811         10.0
    008  842         12.0
    I008 852         8.0
    I008 ALL Version 0.516
  

Ответ №1:

Вы могли бы настроить свой собственный алгоритм сортировки.

Обычно C # имеет несколько интерфейсов, которые вы можете реализовать, например IComparable или IEquatable, которые используются такими методами, как Array.Sort(), для сортировки массива или коллекции.

Приветствую, Фелипе

Ответ №2:

Не проходя через обручи и не написав свой собственный алгоритм сортировки, я бы просто предварительно запросил данные, УПОРЯДОЧЕННЫЕ По условию, которое вы в конечном итоге хотите представить.

Если из MySQL, вы можете использовать IF()… Если из других, таких как SQL-Server, вам, возможно, придется заменить на использование CASE, КОГДА / ELSE END

 SELECT 
      pr.Code,
      pr.Product,
      pr.Weight
   from
      ProductTable pr
   order by
      if( pr.Product = 'N/A', 1, 2 ),
      if( LEFT( pr.Code, 1 ) = 'I', 2, 1 ),
      pr.Code
  

Комментарии:

1. даже с использованием ORDERED BY, я думаю, мне все еще придется немного повозиться. По мере того, как она будет создаваться в базе данных SQL, я думаю, я могу добавить к ней еще один столбец и назвать его priority или что-то в этом роде, а затем выполнить цикл по базе данных и пометить что-либо с помощью Product = N / A как 1, что-либо с ‘I’ как 3, а затем что-либо еще как 2. Затем просто выполните команду ORDERED BY в поле priority.

2. @Gazlar, вы можете выполнить сложное упорядочение в SQL, какой SQL вы используете… MySQL, SQL-Сервер, ???

3. Я использую SQLCE в качестве базы данных и Linq для выполнения любого запроса и т.д.

4. Есть ли способ Linq сделать то, что вы написали DRapp?

5. Извините, я не могу помочь в этом отделе… Я не использую Linq… (пока)