2013-09-19 5 views
0

Я знаю, что есть много подобных вопросов, и я потратил много времени на поиск возможных решений. Но я все еще не уверен, что это самый простой способ сделать это.Односторонняя привязка данных DataGridView к списку объектов

Цель состоит в том, чтобы показать LogItems (отметка времени, уровень серьезности, сообщение) в DataGridView, отсортированную по их метке времени и позволяющую пользователю фильтровать элементы по уровню серьезности.

Вот именно то, что я (не) нужно:

  • Один способ связывания данных из DataGridView к списку/коллекции объектов. Нет необходимости редактировать объекты через DataGridView или добавлять/удалять объекты через DataGridView. Но DataGridView должен автоматически обновляться, когда я добавляю или удаляю объекты в этот список/коллекцию.
  • Объекты имеют временную метку (DateTime) и должны отображаться по этой временной шкале. Меня не волнует, сохранит ли этот список их сортировку (что-то вроде SortedList<T> было бы неплохо, но его не существует), или если DataGridView или BindingSource позаботится о сортировке. Нет необходимости для пользователя настраивать сортировку, нажимая на заголовки столбцов.
  • Простая фильтрация, основанная на значении одного столбца (серьезность).

Вот некоторые подходы, я придумал:

  • Используйте BindingList<T> в качестве основной коллекции не работает, так как он не поддерживает сортировку и фильтрацию.
  • Обтекание некоторой коллекции с помощью BindingSource не помогает, если базовая коллекция не поддерживает сортировку и фильтрацию.
  • Написать заказ, который реализует IBindingListView. Это выглядит довольно сложно, и мне нужно только подмножество функций, которые предоставляет IBindingListView. И я слишком ленив.
  • Используйте BindingListViewsourceforge project. Это, вероятно, слишком тяжело для того, что мне нужно, и я не хочу полагаться на сторонние библиотеки, если мне это не нужно.

Что было бы простым и быстрым решением для этого?

ответ

0

Использование DataTable будет вариант, но в конце концов я решил использовать BindingListView из sourceforge вместо этого и я очень счастлива с ним.

Проблема с подходом DataTable заключается в том, что для копирования будет необходимо скопировать все данные из моих пользовательских объектов в DataTable.

1

Я бы рекомендовал использовать DataTable. Вы получите все, что вам нужно.

Просто сделайте DataGridView ReadOnly, чтобы предотвратить редактирование пользователем. он будет обновляться, когда базовый DataTable будет обновлен.

Приветствия

Смежные вопросы