Подтвердить что ты не робот

Каковы преимущества использования источника привязки с привязкой list <business obj> как datasource?

Я могу напрямую привязать элемент управления DataGridView к списку привязок к моим бизнес-объектам, установив свойство DataSource. Мой бизнес-объект реализует INotifyPropertyChanged, поэтому DGV обновляется при добавлении нового элемента в список привязок или существующий.

Что касается работы с одиночными записями, я могу привязать свой бизнес-объект к текстовым полям и другим соответствующим элементам управления.

Я также могу получить BindingList и создать класс CustomBindingList для реализации необходимых методов IBindable, как описано в приведенной ниже ссылке: http://msdn.microsoft.com/en-us/library/aa480736.aspx

В качестве альтернативы, я видел, как люди рекомендуют использовать BindingSource. BindingSource Datasource - это бизнес-объект, а DGV DataSource - BindingSource.

В любом случае, основываясь на BindingSource, я не предлагаю:

  • Фильтрация (фильтр не работает). Реализация должна быть предоставлена ​​мной.
  • Сортировка и поиск не работают. Реализация должна быть предоставлена ​​мной.

Итак, почему рекомендуется использовать подход BindingSource?

Изображение большего размера: Является новым для концепций OOPS и С#. Работа с приложениями базы данных. Winforms. До сих пор использовался только подход DataSet/DataTable. Теперь мы пытаемся создать и использовать собственные пользовательские классы.

Обычно имеют форму "Мастер/Деталь". Когда я нажимаю на строку Detail в DGV, я хочу отредактировать эту запись в отдельном окне. Поэтому мне нужно получить дескриптор элемента списка, представленного этой строкой в ​​DGV. Попытка найти решение для этого привела меня к этому вопросу и этому сомнению.

Учитывая то, что я хочу сделать, какой подход лучше и почему?

Некоторые указатели здесь действительно помогут, поскольку я очень новичок в этом.

4b9b3361

Ответ 1

Рекомендуется использовать BindingSource, когда несколько элементов управления в форме используют один и тот же источник данных (За кулисами: Улучшения привязки данных Windows Forms)

Время разработки: я лично считаю, что BindingSource очень полезно при выборе свойств из моего бизнес-объекта при привязке данных к элементам управления.

Чтобы получить дескриптор текущей выбранной строки, попробуйте bindSource1.Current как MyBusinessObject;

Что касается фильтрации и поиска: я использую стороннюю DLL для сеток, которые реализованы. Так что не могу помочь вам в этом, извините.

Когда вы работаете со списками различных типов бизнес-объектов, не используйте список напрямую

List<IAnimal> animals = new List<IAnimal>();
animals.Add(new Cat());
animals.Add(new Dog());
bindingSource1.DataSource = animals;

Вместо этого используйте BindingList следующим образом:

bindingSource1.DataSource = new BindingList<IAnimal>(animals);

Это гарантирует, что все доступные объекты в списке имеют тип IAnimal и сохраняют некоторые исключения.

Ответ 2

Связывание с DataSource может дать вам преимущества при работе с большим набором, только часть которого будет отображаться. Например, если вы посмотрите на Lister Telerik здесь http://www.telerik.com/help/winforms/listview-databinding.html (есть много таких пакетов компонентов, это только последняя, ​​которую я использую биты и куски).

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

Их GridView выполняет то же самое. Существует отображаемая часть сетки, которая отделена от потенциально огромной базовой сетки.

В качестве бонуса вы получаете фильтрацию, сортировку, группировку.

Ответ 3

Насколько я знаю, если вы работаете с базой данных, вы используете bindingSource в середине, чтобы установить двусторонний мост между базой данных и вашим контроль. В противном случае вы можете просто использовать bindingList как источник для своего элемента управления.