Брайан нойес привязка данных в windows forms pdf скачать

Привязка данных в Windows Forms | Брайан Нойес | скачать книгу | Books Catalog - Download books for free. Find books

Привязка данных в Windows Forms

Брайан НойесПривязка данных в Windows FormsПочти всем серьезным приложениям Windows приходится, с одной стороны, использовать данные, хранящиеся в базах данных, с другой — обеспечивать взаимодействие пользователя с этими данными. Именно здесь вступают в действие механизмы и средства привязки данных, которым посвящена книга. Она охватывает все аспекты привязки данных в Windows Forms. Описываются средства, обеспечивающие связь с базой данных, такие, как типизированные наборы данных и адаптеры таблиц, собственно привязываемые к данным элементы управления, события и интерфейсы привязки данных, средства и методики обработки ошибок. Даются подробные инструкции и рекомендации по работе с инструментальными средствами Microsoft Visual Studio для привязки данных. Большое внимание уделяется нововведениям, таким, как адаптеры таблиц и элемент управления DataGridView. Обсуждается создание специальных пользовательских элементов управления и объектов, пригодных для привязки данных. В приложениях рассматриваются параллельные вопросы, связанные с привязкой данных, такие, как привязка в ASP.NET и доступ данным в ADO.NET.

Загрузка…

Привязка данных в Windows Forms
Навазние: Привязка данных в Windows Forms

Автор: Брайан Нойес
Издательство: Бином-Пресс
Год: 2009
ISBN: 978-5-9518-0313-9
DJVU: 6 Мб

Практически всем серьезным приложениям Windows необходимо использовать данные, которые хранятся в базах данных, и обеспечивать взаимодействие пользователя с вышеуказанными данными. Именно тут начинают работать средства и механизмы привязки данных, которым полностью посвящено издание «Привязка данных в Windows Forms». В ней детально описаны все нюансы привязки данных на вышеуказанной платформе. В этой книге описываются средства, которые обеспечивают связь с БД, такие, как адаптеры таблиц и типизированные наборы данных, привязываемые к данным компоненты управления, методики и средства обработки ошибок, интерфейсы и события привязки данных. Здесь даются подробные инструкции и советы по работе со средствами Microsoft Visual Studio, предназначенными для привязки данных. Отметим, что большое внимание в описываемом издании уделяется нововведениям, таким, как элемент управления DataGridView и адаптеры таблиц. В данной книге обсуждается написание специальных пользовательских объектов и элементов управления, которые пригодны для привязки данных. Необходимо сказать, что в приложениях рассматриваются различные параллельные вопросы, которые связаны с привязкой данных, например, доступ информационным данным в ADO.NET и привязка в ASP.NET. Эта книга в первую очередь адресована программистам, которые занимаются написанием клиентских приложений для баз данных.

12,222 просмотров всего, 1 просмотров сегодня

Содержание

  1. ForCoder
  2. ProgBook — книги и учебники по программированию
  3. Привязка данных Windows Forms
  4. В этом разделе
  5. Справочник
  6. Связанные разделы
  7. Связывание данных и Windows Forms
  8. Типы привязки данных
  9. Компонент BindingSource
  10. Типичные сценарии, в которых используется привязка данных
  11. Привязка данных в Windows Forms
  12. Основные принципы
  13. Введение
  14. 1. Мир без привязки
  15. 2. Создание класса, управляющего привязкой данных
  16. 3. Привязка данных средствами Windows Forms
  17. 3.1 Простая привязка данных (Simple data binding)
  18. 3.2 Простая привязка к списку объектов
  19. 3.3 Сложная привязка данных
  20. Интерфейс IBindingList
  21. Класс BindingList
  22. Компонент BindingSource
  23. Выводы

ForCoder

1001064516Навазние: Привязка данных в Windows Forms
Автор: Брайан Нойес
Издательство:
Год: 2009
Страниц: 632
Язык: Русский
Размер: 6
Формат: djvu

Описание книги Привязка данных в Windows Forms:
Почти всем серьезным приложениям Windows приходится, с одной стороны, использовать данные, хранящиеся в базах данных, с другой — обеспечивать взаимодействие пользователя с этими данными. Именно здесь вступают в действие механизмы и средства привязки данных, которым посвящена книга. Она охватывает все аспекты привязки данных в Windows Forms.

Описываются средства, обеспечивающие связь с базой данных, такие, как типизированные наборы данных и адаптеры таблиц, собственно привязываемые к данным элементы управления, события и интерфейсы привязки данных, средства и методики обработки ошибок. Даются подробные инструкции и рекомендации по работе с инструментальными средствами Microsoft Visual Studio для привязки данных. Большое внимание уделяется нововведениям, таким, как адаптеры таблиц и элемент управления DataGridView: Обсуждается создание специальных пользовательских элементов управления и объектов, пригодных для привязки данных. В приложениях рассматриваются параллельные вопросы, связанные с привязкой данных, такие, как привязка в ASP.NET и доступ данным в ADO.NET.

Книга адресована прежде всего программистам, занимающимся созданием клиентских приложений для баз данных.

7,294 просмотров всего, 1 просмотров сегодня

Источник

ProgBook — книги и учебники по программированию

noies privyazka dannyh v windows formsНавазние: Привязка данных в Windows Forms
Автор: Брайан Нойес
Издательство: Бином-Пресс
Год: 2009
ISBN: 978-5-9518-0313-9
DJVU: 6 Мб

Практически всем серьезным приложениям Windows необходимо использовать данные, которые хранятся в базах данных, и обеспечивать взаимодействие пользователя с вышеуказанными данными. Именно тут начинают работать средства и механизмы привязки данных, которым полностью посвящено издание «Привязка данных в Windows Forms». В ней детально описаны все нюансы привязки данных на вышеуказанной платформе. В этой книге описываются средства, которые обеспечивают связь с БД, такие, как адаптеры таблиц и типизированные наборы данных, привязываемые к данным компоненты управления, методики и средства обработки ошибок, интерфейсы и события привязки данных. Здесь даются подробные инструкции и советы по работе со средствами Microsoft Visual Studio, предназначенными для привязки данных. Отметим, что большое внимание в описываемом издании уделяется нововведениям, таким, как элемент управления DataGridView и адаптеры таблиц. В данной книге обсуждается написание специальных пользовательских объектов и элементов управления, которые пригодны для привязки данных. Необходимо сказать, что в приложениях рассматриваются различные параллельные вопросы, которые связаны с привязкой данных, например, доступ информационным данным в ADO.NET и привязка в ASP.NET. Эта книга в первую очередь адресована программистам, которые занимаются написанием клиентских приложений для баз данных.

11,772 просмотров всего, 1 просмотров сегодня

Источник

Привязка данных Windows Forms

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

В этом разделе

Связывание данных и Windows Forms
Общие сведения о привязке данных в Windows Forms.

Источники данных, поддерживаемые Windows Forms
Описывает источники данных, которые можно использовать с Windows Forms.

Интерфейсы, относящиеся к привязке данных
Описывает некоторые интерфейсы, используемые для привязки данных Windows Forms.

Практическое руководство. Реализация интерфейса INotifyPropertyChanged
Показано, как реализовать интерфейс INotifyPropertyChanged. Этот интерфейс сообщает связанному элементу управления об изменениях свойств бизнес-объекта

Практическое руководство. Применение шаблона PropertyNameChanged
показывает, как применить шаблон » PropertyName changed» к свойствам Windows Forms пользовательского элемента управления.

Практическое руководство. Реализация интерфейса ITypedList
Показано, как задействовать обнаружение схемы для связываемого списка путем реализации интерфейса ITypedList.

Практическое руководство. Реализация интерфейса IListSource
Показано, как реализовать интерфейс IListSource, чтобы создать связываемый класс, который не реализует IList, но предоставляет список из другого расположения.

Практическое руководство. Синхронизация элементов управления, связанных с одним источником данных
Показано, как обрабатывать событие BindingComplete для обеспечения синхронизация всех элементов управления, привязанных к источнику данных.

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

Справочник

System.Windows.Forms.Binding
Описывает класс, представляющий связку между связываемым компонентом и источником данных.

System.Windows.Forms.BindingSource
Описывает класс, инкапсулирующий источник данных для привязки к элементам управления.

Связанные разделы

Компонент BindingSource
Содержит список разделов, описывающих использование компонента BindingSource.

Элемент управления DataGridView
Предоставляет список разделов, в которых демонстрируется использование связываемого элемента управления datagrid.

Источник

Связывание данных и Windows Forms

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

Задание рисунка для элемента управления изображения.

Задание цвета фона для одного или нескольких элементов управления.

Задание размера элементов управления.

По существу, привязка данных является автоматическим способом задания любого доступного во время выполнения свойства любого элемента управления в форме.

Типы привязки данных

Windows Формы могут использовать преимущества двух типов привязки данных: простой привязки и сложной привязки. Каждая имеет собственные преимущества.

Тип привязки данных Описание
Простая привязка данных Возможность привязки элемента управления к одному элементу данных, например к значению в столбце таблицы набора данных. Это тип привязки характерен для элементов управления, таких как TextBox или Label, которые обычно отображают одно значение. По сути, любое свойство в элементе управления можно привязать к полю в базе данных. В Visual Studio реализована расширенная поддержка этой функции.

Дополнительные сведения см. в разделе:

— Интерфейсы, связанные с привязкой данных
— как перемещать данные в Windows Forms
— руководство. создание элемента управления Simple-Bound в Windows форме

Сложная привязка данных Возможность привязки элемента управления к нескольким элементам данных, обычно к нескольким записям в базе данных. Сложная привязка также называется привязкой на основе списка. Примеры элементов управления, которые поддерживают сложную привязку, — DataGridView, ListBox и ComboBox. пример сложной привязки данных см. в разделе как привязать Windows Forms ComboBox или элемент управления ListBox к данным.

Компонент BindingSource

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

Типичные сценарии, в которых используется привязка данных

Практически каждое коммерческое приложение использует сведения, полученные из источников данных разных типов. Обычно это осуществляется через привязку данных. В следующем списке приведено несколько наиболее распространенных сценариев, в которых привязка данных используется в качестве метода представления данных и управления ими.

Источник

Привязка данных в Windows Forms

Основные принципы

Автор: Сергей Тепляков
ООО НПП Кронос
Источник: RSDN Magazine #3-2008

Опубликовано: 28.12.2008
Исправлено: 10.12.2016
Версия текста: 1.0

Введение

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

1. Мир без привязки

Привязка данных – это логическая ассоциация между свойствами элементами управления и свойствами некоторого объекта. И вполне можно реализовать эту ассоциацию вручную.

Рассмотрим класс BookInfo, предназначенный для описания информации о книге.

И класс формы, предназначенный для отображения данных класса BookInfo.

figure1

Рисунок 1. Отображение свойств объекта BookInfo.

Так, отлично. Данные отображаются и изменяются, но есть одно замечание. Что, если объект класса BookInfo будет изменен без использования этой формы? В данный момент форма не может узнать об этих изменениях. Это и понятно, сейчас класс BookInfo не поддерживает такую функциональность.

Добавим генерацию событий при изменении свойств класса BookInfo:

И немного изменим класс формы:

Ну что же, благодаря нововведениям C# 3.0 мы смогли сэкономить немало строк кода и в результате получили работоспособное приложение, которое осуществляет двустороннюю «привязку» данных объекта BookInfo к элементам управления. Такой поход применялся длительное время в огромном количестве приложений и, как это ни странно, по сей день активно используется в приложениях Windows Forms.

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

2. Создание класса, управляющего привязкой данных

Разработаем класс, решающий задачу синхронизации свойства объекта (иначе говоря, источника данных) и свойства элемента управления.

Идея достаточно проста. Нужно получить PropertyDescriptor для свойства источника данных и элемента управления. Подписаться на событие изменение этих свойств и в обработчике этих событий изменять соответствующее свойство противоположной стороны.

Тогда класс формы будет выглядеть следующим образом:

Весь остальной код, предназначенный для подписки на события изменения элемента управления и источника данных, больше не нужен. Теперь всем этим занимается CustomBinder. Уже неплохо.

Чтобы лучше понять внутренности реализации CustomBinder и стандартного механизма привязки в Windows Forms, рассмотрим следующий фрагмент кода более подробно.

В первой строке с использованием рефлексии мы получили ссылку на PropertyDescriptor. PropertyDescriptor – это абстрактный класс, который описывает свойство (property) некоторого класса и позволяет манипулировать им. Реально нам возвращается ссылка на экземпляр конкретного (не абстрактного), но недокументированного класса ReflectPropertyDescriptor.

Таким образом, для того, чтобы объект PropertyDescriptor мог уведомить об изменении свойства объекта, нужно, чтобы объект отвечал одному из следующих критериев:

Теперь, я думаю, понятно, почему класс PropertyDescriptor не содержит событие с именем ValueChanged, а содержит набор функций для регистрации и дерегистрации обработчиков этого события.

Еще нужно обратить внимание на обработчики событий изменения свойств источника данных и элемента управления.

При изменении свойства элемента управления нельзя напрямую изменить свойство источника данных, т.к. возможно банальное несоответствие типов данных (как в случае привязки BookInfo.PageCount к pageCountTextBox.Text, которые имеют тип Int32 и String соответственно). Именно для этих целей используется объект класса TypeConverter, доступ к которому можно получить через PropertyDescriptor.

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

3. Привязка данных средствами Windows Forms

3.1 Простая привязка данных (Simple data binding)

Фундаментальным строительным блоком, на основе которого строится привязка данных в Windows Forms, является класс Binding. Основная задача этого класса – обеспечивать синхронизацию между свойством элемента управления и свойством источника данных.

Рассмотрим следующий пример.

В этом фрагменте кода показано два варианта добавления привязки. В первом случае объект класса Binding создается явным образом, а затем добавляется в набор объектов Binding. Во втором случае используется перегруженная версия функции Add класса BindingCollections. Конструктор класса Binding (и аналогичная перегруженная версия функции Add) принимает четыре параметра: имя свойства элемента управления, объект источника данных, имя свойства в источнике данных и булев флаг, определяющий, нужно ли использовать автоматическое форматирование (вопросы форматирования выходят за рамки данной статьи).

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

Во-вторых, механизм привязки данных подписывается на события изменения свойств элемента управления и источника данных, и заботится об их синхронизации (с использованием класса PropertyDescriptor).

Рассмотрим подробнее, как работает механизм передачи данных из элемента управления в источник данных, какие условия должны выполняться для этого, и как может повлиять на это пользователь (рисунок 2).

figure2

Рисунок 2. Механизм передачи данных из элемента управления в источник данных.

При изменении свойства элемента управления проверяется значение свойства DataSourceUpdateMode класса Binding, которое определяет, как элемент управления обновляет источник данных. В качестве значения ему присваивается один из членов перечисления DataSourceUpdateMode: OnPropertyChanged, OnValidation или Never. Значение по умолчанию, OnValidation, указывает на необходимость генерации событий Validating и Validated класса Control. Они генерируются, когда элемент управления теряет фокус ввода. В программе они служат для проверки правильности введенных в элемент управления данных. Таким способом создатели Windows Forms подсказывают программисту, что желательно проверить корректность значения элемента управления до того, как оно попадет в источник данных. Если проверка не нужна, то значению DataSourceUpdateMode нужно присвоить значение OnPropertyChanged, если же вообще нет необходимости в обновлении источника данных при изменении свойства элемента управления – нужно присвоить значение Never.

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

Последним необходимым условием корректного обновления источника данных является то, что свойство должно быть модифицируемым (т.е. реализовывать соответствующий set аксессор).

Теперь рассмотрим механизм обновления элемента управления при изменении источника данных (рисунок 3).

figure3

Рисунок 3. Механизм обновления элемента управления.

Основным условием возможности обновления элемента управления при изменении источника данных является поддержка определенного набора событий со стороны источника данных. Источник данных должен содержать события PropertyName Changed для каждого свойства, либо реализовывать интерфейс INotifyPropertyChanged (более подробно об этом я рассказывал в разделе «Создание класса, управляющего привязкой данных»).

Даже при наличии одного из вышеперечисленных событий, существует возможность включать или отключать обновление элемента управления. Для этого служит свойство ControlUpdateMode класса Binding, которое может принимать одно из двух значений: OnPropertyChanged или Never.

Кром того, программист может вмешаться в процесс обновления элемента управления данными из источника, подписавшись на событие Parse класса Binding.

А что, если нужно работать с коллекцией объектов BookInfo? Для этих целей служит привязка данных к списочным источникам ( list data source ).

3.2 Простая привязка к списку объектов

Списочный источник данных (list data source) – это коллекция объектов, предназначенная для привязки к элементу управления. Минимальным требованием, которое предъявляет механизм привязки данных Windows Forms к списочному источнику данных, является реализация интерфейса IList. Хотя, с появлением обобщенных коллекций, использование List выглядит более предпочтительным.

Рассмотрим следующий пример.

Этот код практически не отличается от кода, приведенного в предыдущем разделе, за исключением того, что привязка осуществляется не к объекту класса BookInfo, а к объекту List (который создается и заполняется в методе CreateBookInfoList).

Здесь возникает проблема, так как элемент управления TextBox не умеет просматривать более одного значения. Необходимо добавить возможность навигации по списку объектов BookInfo.

Для решения этой задачи элемент управления для каждого источника данных содержит объект класса BindingManagerBase, для доступа к которому используется BindingContext. Проблема в том, что BindingManagerBase – это абстрактный базовый класс, экземпляры которого не могут быть созданы. На самом деле BindingContext содержит экземпляры одного из двух классов PropertyManager или CurrencyManager, в зависимости от типа привязки. Так, для одиночного источника данных ( item data source ) используется PropertyManager (рисунок 4), а для списочного источника данных ( list data source ) используется CurrencyManager (рисунок 5).

Класс BindingManagerBase содержит свойство Position, которое определяет текущий объект в источнике данных. Для объектов класса PropertyManager значение свойства Position всегда равно 0, т.к. он отвечает только за один объект в источнике данных.

figure4

Рисунок 4. PropertyManager и одиночный источник данных.

Для объектов CurrencyManager значение свойства Position равно индексу в источнике данных.

figure5

Рисунок 5. CurrencyManager и списочный источник данных.

Для реализации навигации по источнику данных необходимо получить объект BindingManagerBase, который соответствует этому источнику.

Результат запуска программы показан на рисунке 6.

figure6

Рисунок 6. Простая привязка данных к списочному источнику.

Хотя простая привязка (simple binding) отлично работает со списочными источниками данных (list data source), все же для этих целей лучше подойдут элементы управления, способные отображать более одного элемента за раз, такие как ListView или DataGridView. Для этих целей используется сложная привязка данных (complex data binding).

3.3 Сложная привязка данных

Сложная привязка (complex data binding) – это привязка списочного источника данных целиком к элементу управления, в отличие от простой привязки, в которой к элементу управления привязан только текущий элемент источника данных.

Термин «сложная привязка» не означает, что использование этого типа связывания сложнее, чем использование простого связывания. Название всего-навсего отражает тот факт, что элементы управления поддерживают дополнительную функциональность при отображении данных и работе с ними.

Наиболее простым и распространенным примером сложной привязки является использование элемента управления DataGridView.

figure7

Рисунок 7. Привязка данных к элементу управления DataGridView.

В случае привязки данных к элементу управления DataGridView происходит следующее. DataGridView автоматически определяет публичные (public) свойства источника данных, создает соответствующие колонки, и позволяет редактировать данные непосредственно в таблице (включая добавление и удаление записей).

К сожалению, при изменении количества записей в источнике данных DataGridView автоматически не обновляется. Это связано с тем, что DataGridView никак не может узнать об изменении в источнике данных.

Для реализации автоматического обновления элементов управления при использовании простой привязки источник данных должен реализовывать определенный интерфейс (событие с именем PropertyNameChanged или интерфейс INotifyPropertyChanged). Аналогично, для автоматического обновления элемента управления при использовании сложной привязки данных, источник данных должен следовать определенным соглашениям, в частности, он должен реализовывать интерфейс IBindingList.

Интерфейс IBindingList

Краткое описание интерфейса IBindingList:

Интерфейс IBindingList предназначен для поддержки таких дополнительных операций над источником данных, как добавление, обновление, удаление элементов списка, а также добавление нового элемента с помощью функции AddNew. Кроме этого, класс, реализующий интерфейс IBindingList, может поддерживать сортировку, поиск и уведомление при изменении элемента списка. Все эти операции являются не обязательными и определяются свойствами SupportSorting, SupportSerching и SupportChangeNotification соответственно.

Если источник данных, реализующий интерфейс IBindingList, поддерживает уведомление об изменении (и сигнализирует об этом, возвращая true в свойстве SupportsChangeNotification), тогда элемент управления может подписаться на событие ListChanged и получать уведомления о добавлении, изменении и удалении элементов коллекции. Если источник данных поддерживает сортировку, то такие элементы управления, как DataGridView, могут использовать эту функциональность.

Класс BindingList

Класс BindingList – это обобщенная реализация интерфейса IBindingList. Он реализует управление списком объектов (через AllowEdit, AllowNew, AllowRemove и AddNew), уведомления при изменении коллекции (SupportChangeNotification возвращает true, генерируется событие ListChanged), а также реализует транзакционность добавления новых элементов путем реализации интерфейса ICancelAddNew.

figure8

Теперь, в отличие от примера из предыдущего раздела, DataGridView нормально реагирует на добавление и удаление элементов, но никак не реагирует на нажатие реализованной мной кнопки «Update Current» (обновляющую текущий элемент списка). Для того чтобы BindingList генерировал событие ListChanged при изменении объекта T, необходимо, чтобы класс T реализовывал интерфейс INotifyPropertyChanged.

Хочу напомнить, что для автоматического обновления элемента при использовании простой привязки данных необходимо выполнение одного из двух условий: реализация интерфейса INotifyPropertyChanged или реализация событий в вида PropertyNameChanged. А при использовании BindingSource наличие событий вида PropertyName Changed никак не приведет к автоматическому обновлению элемента управления.

А что, если объекты коллекции уже содержат события, уведомляющие об изменении состояния объекта, но не реализуют интерфейс INotifyPropertyChanged?

Теперь предположим, что класс BookInfo реализует событие BookInfoChanged, которое срабатывает при изменении свойств объекта.

Тогда можно создать класс BookInfoBindingList следующим образом:

Класс BindingList не реализует поиск и сортировку, то есть свойства SupportSearching и SupportSorting возвращают false, а при попытке вызова методов ApplySort или Find будет сгенерировано исключение NotSupportedException.

Для реализации сортировки и поиска достаточно создать производный класс от BindingList и переопределить несколько методов, в то время как основная работа по управлению привязкой будет выполняться базовым классом.

Класс BindingList прекрасно подходит, если нужно создать контейнер элементов с нуля. Но бывают случаи, когда контейнер уже есть, но нужно добавить двустороннюю связь между контейнером и элементом управления. Для решения этой задачи (а также многих других) предназначен компонент BindingSource.

Компонент BindingSource

Рассмотрим применение компонента BindingSource для работы со списком объектов BookInfo.

Компонент BindingSource можно рассматривать как типизированную коллекцию элементов, при этом тип источника данных может быть задан различными способами.

После того как компонент BindingSource определил тип хранимых объектов, он будет обеспечивать типобезопасность (метод Add класса BindingSource принимает object). При попытке добавить объект несоответствующего типа будет сгенерировано исключение InvlidOperationException.

Компонент BindingSource достаточно сложен и предназначен для решения различных задач. Он может применяться как для простой, так и для сложной привязки данных, в качестве одиночного или списочного источника данных, поддерживает фильтрацию, уведомления при изменении списка объектов, транзакционное добавление новых элементов, расширенную поддержку во время разработки и многое другое. Для более подробной информации по этому поводу обращайтесь к [1].

Выводы

Привязка данных является важной частью разработки приложений Windows Forms. От правильного понимания принципов, на которых она построена, может зависеть, сколько усилий вам потребуется для реализации функциональности вашего приложения, и сколько придется потратить времени на анализ кода, который сгенерировал за вас дизайнер Visual Studio.

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

Источник

Краткая биография автора

На нашем книжном сайте Вы можете скачать книги автора Брайана Нойеса в самых разных форматах (epub, fb2, pdf, txt и многие другие). А так же читать книги онлайн и бесплатно на любом устройстве – iPad, iPhone, планшете под управлением Android, на любой специализированной читалке. Электронная библиотека КнигоГид предлагает литературу Брайана Нойеса в жанрах .

Творчество Брайана Нойеса

На нашем сайте представлена 1 книга автора Брайана Нойеса. Самая популярная по мнению наших читателей «».

Привязка данных в Windows Forms

Похожие авторы

Привязка данных

Эта глава основана на материалах главы 26, в которой описаны различные способы извлечения и изменения данных, и посвящена представлению данных для пользователей с привязкой данных к различным элементам управления Windows. Точнее говоря, здесь будут обсуждаться следующие вопросы:

отображение данных с помощью элемента управления DataGridView;

возможности привязки данных .NET и как они работают;

как использовать проводник по серверу Server Explorer для создания соединения и генерации класса DataSet (не написав ни единой строки кода);

как использовать проверку попаданий и рефлексию строк DataGrid.

Коды примеров этой главы доступны на прилагаемом компакт-диске.

Элемент управления DataGridView

Элемент управления DataGrid, доступный начиная с ранних выпусков .NET, был вполне функциональным, но имел множество недоработок, которые делали его неподходящим для применения в коммерческих приложениях, например, отсутствовала возможность вывода графических изображений и раскрывающихся элементов, блокировка столбцов и тому подобное. Этот элемент управления был не вполне полноценным, поэтому многие независимые поставщики предлагали собственные сеточные компоненты, которые компенсировали эти недостатки и представляли гораздо более широкую функциональность.

В .NET 2.0 появился дополнительный сеточный элемент управления — DataGridView. Он восполнил многие недостатки своего предшественника и добавил важную функциональность, которая до этого была реализована лишь в продуктах независимых поставщиков.

Этот элемент оснащен такими же средствами привязки данных, как и старый DataGrid, а потому может работать совместно с классами Array, DataTable, DataView или DataSet либо компонентами, реализующими интерфейс IListSource или IList. Элемент управления DataGridView обеспечивает возможности разнообразного представления одних и тех же данных. В простейшем случае отображаемые данные (такие как из DataSet) указываются установкой значений свойств DataSource и DataMember. Отметим, что этот элемент управления не может подставляться вместо DataGrid, потому что его программный интерфейс полностью отличается от интерфейса DataGrid. К тому же он предлагает более широкие возможности, о которых мы и поговорим в этой главе.

1102 Часть V. Презентации

Отображение табличных данных

В главе 19 было представлено множество способов выбора данных и чтения их в таблицы, хотя отображались они очень примитивным способом — с использованием

Console.WriteLine().

Следующий пример демонстрирует, как извлечь данные и отобразить их в элементе управления DataGridView. Для этой цели мы создадим новое приложение DisplayTabularData, внешний вид которого показан на рис. 32.1.

Рис. 32.1. Внешний вид приложения DisplayTabularData

Это простое приложение выбирает каждую запись из таблицы Customer базы данных Northwind и отображает эти записи пользователю в элементе управления DataGridView. Ниже показан код этого примера (исключая код определения формы и элемента управления).

using System;

using System.Configuration; using System.Data;

using System.Data.Common; using System.Data.SqlClient; using System.Windows.Forms; namespace DisplayTabularData

{

partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

private void getData_Click(object sender, EventArgs e)

{

string customers = «SELECT * FROM Customers»;

using (SqlConnection con = new SqlConnection (ConfigurationManager. ConnectionStrings[«northwind»].ConnectionString))

{

DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter(customers, con); da.Fill(ds, «Customers»); dataGridView.AutoGenerateColumns = true; dataGridView.DataSource = ds;

dataGridView.DataMember = «Customers»;

}

}

}

}

Глава 32. Привязка данных 1103

Форма состоит из кнопки getData, в результате щелчка на которой вызывается метод getData_Click(), показанный в коде примера.

При этом конструируется объект SqlConnection, использующий свойство

ConnectionStrings класса ConfigurationManager. Далее создается набор данных и заполняется на основе таблицы базы данных с помощью объекта DataAdapter. Затем эти данные отображаются элементом управления DataGridView за счет установки свойств DataSource и DataMember.

Отметим, что свойству AutoGenerateColumns также присваивается значение true, поскольку это гарантирует, что пользователь что-то увидит. Если этот флаг не установлен, все столбцы придется создавать самостоятельно.

Источники данных

Элемент управления DataGridView предлагает гибкий способ отображения данных; в дополнение к установке DataSource равным DataSet, а DataMember — равным имени отображаемой таблицы, свойство DataSource может указывать на любой из следующих источников:

массив (визуальная таблица может быть связана с любым одномерным массивом);

DataTable;

DataView;

DataSet или DataViewManager;

компоненты, реализующие интерфейс IListSource;

компоненты, реализующие интерфейс IList;

любой обобщенный класс коллекции или объект, унаследованный от обобщенного класса коллекции.

В последующих разделах будут представлены примеры применения каждого из упомянутых источников данных.

Отображение данных из массива

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

string[] stuff = new string[] {«One», «Two», «Three»}; dataGridView.DataSource = stuff;

Если источник данных включает множество возможных таблиц-кандидатов (как в случае с DataSet или DataViewManager), также понадобится установить свойство DataMember.

Можно заменить этим кодом код события getData_ Click из предыдущего примера. Проблема с этим кодом проявляется в отображении данных (рис. 32.2).

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

гося в массиве, вместо строкового значения. Первое Рис. 32.2. Проблема, связанная (и единственное) общедоступное свойство строки — с примером кода

1104 Часть V. Презентации

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

GetProperties класса TypeDescriptor. Он возвращает коллекцию объектов PropertyDescriptor, которая затем может использоваться для отображения данных. Элемент управления .NET PropertyGrid применяет этот метод для отображения произвольных объектов.

Один из способов решения этой проблемы с отображением строк в DataGridView заключается в создании класса-оболочки:

protected class Item

{

public Item(string text)

{

_text = text;

}

public string Text

{

get{return _text;}

}

private string _text;

}

Рис. 32.3. Вывод массива объектов класса Item

На рис. 32.3 показан вывод массива объектов класса Item (который может быть и структурой), служащего источником данных.

DataTable

DataTable можно отображать в элементе управления DataGridView двумя способами:

если используется DataTable сама по себе, следует просто установить свойство DataSource элемента управления на эту таблицу;

если DataTable входит в DataSet, необходимо установить DataSource на DataSet, а свойство DataMember — равным имени DataTable внутри этого DataSet.

На рис. 32.4 показан результат запуска кода примера DataSourceDataTable. Обратите внимание на отображение последнего столбца — он показывает флаж-

ки вместо более привычных полей редактирования. Дело в том, что элемент управления DataGridView в отсутствие любой другой информации будет читать схему из источника данных (в данном случае — таблицы Products) и на основе типа столбца автоматически выбирать тип элемента управления, отображающего его. В отличие от DataGrid, DataGridView имеет встроенную поддержку столбцов с изображениями, кнопками и комбинированными списками.

Рис. 32.4. Результат запуска кода примера DataSourceDataTable

Глава 32. Привязка данных 1105

Данные в базе не изменяются, когда изменяются поля в визуальной таблице, поскольку ее данные хранятся локально на клиентском компьютере — нет никакого активного подключения к базе данных. Обновление данных в базе мы обсудим в этой главе позднее.

Отображение данных из DataView

DataView предоставляет средства фильтрации и сортировки данных внутри DataTable. Когда данные выбираются из базы, обычно пользователю разрешено сортировать их, например, щелчком на заголовке того или иного столбца. В дополнение пользователь может пожелать отфильтровать данные, чтобы показать только определенные строки, например, те, что подверглись изменениям. DataView можно фильтровать так, что только выбранные строки будут показаны пользователю; однако это не ограничивает столбцы из DataTable.

DataView не позволяет фильтровать столбцы, а только строки.

Чтобы создать DataView на базе существующей DataTable, нужно использовать следующий код:

DataView dv = new DataView(dataTable);

После создания DataView его настройки могут быть изменены. Это касается данных и допустимых действий над ними, когда они отображаются в табличном виде, например:

установка AllowEdit = false отключает всю функциональность редактирования столбцов в строках;

установка AllowNew = false отключает функциональность новых строк;

установка AllowDelete = false отключает возможность удаления строк;

установка RowStateFilter отображает только строки с заданным состоянием;

установка RowFilter позволяет фильтровать строки на основе выражений.

В следующем разделе будет показано, как использовать настройки RowFilter и RowStateFilter; остальные настройки объяснений не требуют.

Фильтрация строк на основе данных

После того, как создан DataView, данные, отображенные в этом представлении, могут быть изменены установкой свойства RowFilter. Это свойство, задаваемое строкой, применяется в качестве средства фильтрации на базе критериев, определенных значением строки. Ее синтаксис подобен конструкции WHERE стандартного SQL, но относится к данным, уже полученным из базы.

В табл. 32.1 показаны некоторые примеры конструкций фильтрации. Исполняющая система старается наилучшим образом подогнать типы данных в вы-

ражениях фильтра к соответствующим типам исходных столбцов. Например, вполне допустимо было в предыдущем примере написать UnitsInStock > ’50’ несмотря на то, что столбец имеет целочисленный тип. Если указывается неправильное выражение фильтра, это приводит к возбуждению исключения EvaluateException.

1106 Часть V. Презентации

Таблица 32.1. Примеры конструкций фильтрации

Конструкция

Описание

UnitsInStock > 50

Показывает только те строки, в которых значение столбца UnitsInStock

больше 50.

Client = ‘Smith’

County LIKE ‘C*’

Возвращает записи для заданного клиента.

Возвращает все записи, в которых поле Country начинается с C — в данном примере будут возвращены строки со следующими значениями

Country: Cornwall, Cumbria, Cheshire и Cambridgeshire. Символ %

может использоваться как односимвольный шаблон, в то время как * — обобщенный шаблон, которому соответствует ноль или более символов.

Фильтрация на основе состояния строк

Каждая строка внутри DataView имеет определенное состояние, которое может принимать одно из значений, перечисленных в табл. 32.2. Это состояние также может использоваться для фильтрации строк, видимых пользователю.

Таблица 32.2. Допустимые состояния строк

DataViewRowState

Описание

Added

Список всех вставленных строк.

CurrentRows

Список всех строк за исключением удаленных.

Deleted

Список всех исходных строк, которые были выделены и удалены;

вновь созданные и тут же удаленные строки не отображаются.

ModifiedCurrent

Список всех измененных строк с их текущими значениями.

ModifiedOriginal

Список всех измененных строк в их исходном состоянии (до изменения).

OriginalRows

Список всех строк, которые были изначально получены от источника дан-

ных. Не включает новые строки. Показывает исходные значения столбцов

(то есть те, что были до внесения изменений).

Unchanged

Список всех строк, которые не были изменены.

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

Фильтр не только применяется к видимым строкам, но также и к столбцам внутри этих строк. Это наглядно демонстрирует выбор ModifiedOriginal или ModifiedCurrent. Доступные состояния описаны в главе 20 и основаны на перечислении DataRowVersion.

Например, когда пользователь обновляет столбец в строке, то эта строка будет отображена как при выборе ModifiedOriginal, так и при ModifiedCurrent; однако действительным значением будет либо исходное значение Original, полученное из базы данных (если выбрано ModifiedOriginal), либо текущее измененное значение

DataColumn (в случае выбора ModifiedCurrent).

Сортировка строк

Помимо фильтрации, данные в DataView можно также сортировать. Сортировка выполняется по возрастанию или по убыванию — простым щелчком на заголовке столбца в элементе управления DataGridView (рис. 32.6).

Глава 32. Привязка данных 1107

Рис. 32.5. Пример с двумя таблицами

Рис. 32.6. Сортировка с использованием элемента управления DataGridView

Единственная проблема состоит в том, что сортировать можно только по одному столбцу, в то время как лежащий в основе элемент управления DataView может сортировать по множеству столбцов. Когда столбец сортируется — либо щелчком на его заголовке (как показано, на столбце ProductName), либо программно — DataGrid показывает в его заголовке изображение стрелочки для пометки, по какому столбцу выполнена сортировка.

Программная установка порядка сортировки реализуется путем присвоения свойству Sort в DataView соответствующего значения:

dataView.Sort = «ProductName»;

dataView.Sort = «ProductName ASC, ProductID DESC»;

Первая строка сортирует данные по значению столбца ProductName, что можно видеть на рис. 32.6. Вторая строка сортирует данные в возрастающем порядке по

ProductName и в убывающем — по ProductID.

DataView поддерживает сортировку и по возрастанию значений столбца, и по их убыванию. Если данные в DataView отсортированы по более чем одному столбцу, то DataViewGrid перестает показывать стрелочки-символы сортировки в заголовках.

Каждый столбец в визуальной таблице может быть строго типизированным, поэтому его порядок сортировки будет основан не на строковом представлении данных столбца, а на самих данных. В результате, если в DataGrid присутствует столбец даты, то пользователь может отсортировать строки по датам, а не по их строковым представлениям (которое может иметь различный формат).

1108 Часть V. Презентации

Отображение данных из класса DataSet

Существует одно средство DataSet, которое отличает DataViewGrid от DataGrid — это когда DataSet определяет отношение между таблицами. Как в приведенных выше примерах с DataViewGrid, DataGrid может одновременно отображать только одну таблицу. Однако, как показано в следующем примере с DataSourceDataSet, можно выполнять навигацию по отношениям внутри DataSet в пределах одного экрана. Следующий код можно использовать для генерации такого DataSet на основе таблиц Customers и Orders базы данных Northwind. Этот пример загружает данные из этих двух DataTable и затем создает отношение между ними под названием CustomerOrders:

string orders = «SELECT * FROM Orders»; string customers = «SELECT * FROM Customers»;

SqlConnection conn = new SqlConnection(source); SqlDataAdapter da = new SqlDataAdapter(orders, conn); DataSet ds = new DataSet();

da.Fill(ds, «Orders»);

da = new SqlDataAdapter(customers , conn); da.Fill(ds, «Customers»); ds.Relations.Add(«CustomerOrders»,

ds.Tables[«Customers»].Columns[«CustomerID»],

ds.Tables[«Orders»].Columns[«CustomerID»]);

Созданный DataSet связывается с DataGrid простым вызовом SetDataBinding():

dataGrid1.SetDataBinding(ds, «Customers»);

Это даст вывод, показанный на рис. 32.7.

В отличие от других примеров DataGridView, приведенных с этой главе, здесь мы видим знак + слева от каждой записи. Это отражает тот факт, что DataSet имеет управляемое отношение между заказчиками и заказами. В коде можно определить любое количество таких отношений.

Когда пользователь щелкает на знаке +, отображается список отношений (или скрывается — если ранее он был отображен). Щелчок на имени отношения позволяет перейти к связанным записям (рис. 32.8); в данном примере — к списку заказов, размещенных выбранным заказчиком.

Рис. 32.7. Знаки + слева от каждой записи обозначают отношения между заказчиками и заказами

Глава 32. Привязка данных 1109

Рис. 32.8. Связанные записи, отображаемые в результате щелчка на имени отношения

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

Отображение данных в DataViewManager

Отображение данных в DataViewManager — такое же, как для DataSet, показанное в предыдущем разделе. И потому для отображения только заказчиков из Великобритании (UK), содержащихся в таблице Customers, необходим следующий код:

DataViewManager dvm = new DataViewManager(ds); dvm.DataViewSettings[«Customers»].RowFilter = «Country=’UK'»; dataGrid.SetDataBinding(dvm, «Customers»);

На рис. 32.9 показан вывод примера кода DataSourceDataViewManager.

Рис. 32.9. Вывод примера кода DataSourceDataViewManager

Интерфейсы IListSource и IList

DataGridView также поддерживает любые объекты, которые реализуют интерфейсы IListSource или IList. Интерфейс IListSource имеет только один метод — GetList(), который возвращает интерфейс IList. В свою очередь, IList пред-

1110 Часть V. Презентации

ставляет собой нечто более интересное. Этот интерфейс реализуют многие классы исполняющей системы. Среди них — Array, ArrayList и StringCollection.

Когда используется IList, в силе остается то же предупреждение относительно объектов, содержащихся в коллекции, которое было упомянуто ранее в примере с Array в качестве источника данных, а именно — если источником данных DataGrid служит StringCollection, то в визуальной таблице отображаются длины строк, а не их текст, как ожидалось.

Отображение обобщенных коллекций

В дополнение к уже описанным типам, DataGridView также поддерживает привязку к обобщенным коллекциям. При этом применяется такой же синтаксис, как и в других примерах, приведенных ранее в этой главе — нужно просто установить свойство DataSource в ссылку на коллекцию, и элемент управления сгенерирует соответствующий экран.

Опять-таки, отображаемые столбцы основаны на свойствах объекта — все общедоступные читаемые поля отображаются в DataGridView. В следующем примере демонстрируется отображение списочного класса.

class PersonList : List < Person >

{

}

class Person

{

public Person( string name, Sex sex, DateTime dob )

{

_name = name; _sex = sex;

_dateOfBirth = dob;

}

public string Name

{

get { return _name; } set { _name = value; }

}

public Sex Sex

{

get { return _sex; } set { _sex = value; }

}

public DateTime DateOfBirth

{

get { return _dateOfBirth; } set { _dateOfBirth = value; }

}

private string _name; private Sex _sex;

private DateTime _dateOfBirth;

}

enum Sex

{

Male,

Female

}

Экран показывает несколько экземпляров класса Person, которые сконструированы внутри класса PersonList (рис. 32.10).

Содержание

  1. ProgBook — книги и учебники по программированию
  2. С# 4.0 на примерах — Бен Ватсон
  3. Современная практика программирования на Microsoft Visual Basic и Visual C# — Франческо Балена, Джузеппе Димауро
  4. Visual C# на примерах — Михаил Абрамян
  5. Привязка данных в Windows Forms — Брайан Нойес
  6. Программирование с использованием Microsoft Windows Forms — Чарльз Петцольд
  7. Программирование для Microsoft Windows на С# — В 2-х томах — Том 1 — Петцольд Ч.
  8. Книги по Windows Forms на C#. Какие?

ProgBook — книги и учебники по программированию

С# 4.0 на примерах — Бен Ватсон

Издание «С# 4.0 на примерах» предлагает рассмотреть на конкретных примерах принципы программирования на языке Microsoft С# 4.0, при этом даются основы языка и разбираются решения типичных задач с использованием .NET Framework. В книге продемонстрировано, как наиболее эффективно создавать классы, интерфейсы, типы, программный код, который допускает многократное применение. Освещаются приемы обработки данных, принцип которых основан на использовании сериализации, коллекций, баз данных и XML. Показано, каким образом создаются веб-приложения на основе технологий Silverlight и ASP .NET, а также как реализуется пользовательский интерфейс с использованием технологий WPF и WinForms. На практике подробно рассматриваются новые возможности языка С# 4.0. Значительное внимание уделяется организации взаимодействия с системным программным обеспечением и операционной системой Windows, эффективному использованию шаблонов, предназначенных для создания сложных программ. В книге предоставлено более 200 готовых решений, примеров уже проверенного кода и оптимальных технических приемов. Издание, в первую очередь, ориентировано на программистов.

Современная практика программирования на Microsoft Visual Basic и Visual C# — Франческо Балена, Джузеппе Димауро

«Современная практика программирования на Microsoft Visual Basic и Visual C#» представляет собой профессиональное руководство, написанное известными программистами, и объединяет в себе богатый опыт разработчиков и консультантов по применению Visual Basic и Visual C#. Книга содержит практические рекомендации и эффективные методики программирования для существенного повышения уровня разработки программ. Детально описываются правила, их назначения, все преимущества и недостатки их применения, различные исключения из правил и существующие им альтернативы, а также практические примеры их применения. Благодаря передовым методикам, рассмотренным в книге, разработчики научатся писать безопасный, надежный и универсальный код, использовать все преимущества Microsoft .NET Framework, создавать эффективные программные решения, повышать продуктивность командной разработки путем согласования стилей и методов кодирования, создавать рациональные библиотеки классов и практичные иерархии объектов и т.д.
Руководство предоставляет передовые методики работы с ресурсами, типами и структурами, сборками, полями, методами, свойствами, событиями, конструкторами, интерфейсами, числами и датами, исключениями, пользовательскими атрибутами, строками, наборами и массивами, памятью; с приложениями Windows Forms , Microsoft ASP .NET Web Forms, различными веб-сервисами, Microsoft ADO .NET; потоками и синхронизацией; компонентами, обеспечением безопасности, удаленным взаимодействием и др. Книга состоит из 33 глав и трех приложений и позволит специалисту значительно расширить свой программистский опыт и развить творческие способности в этой сфере.

Visual C# на примерах — Михаил Абрамян

Книга «Visual C# на примерах» содержит в себе описание тридцати двух проектов, которые демонстрируют разные нюансы проектирования Windows-приложений для .NET Framework в области Visual C# 2005/2008. Здесь описываются наиболее рациональные приемы создания программ, управляемых событиями, характерные особенности консольных и MDI-приложений, а также механизм обработки исключений. В ней детально описываются ключевые элементы Windows Forms и классы, которые входят в графическую библиотеку GDI+. В данной книге демонстрируются приемы работы с мышью и клавиатурой, дополнительные функции .NET-приложений, в т.ч. реализация режима drag & drop, а также работа с реестром Windows и многое другое. На прилагаемом диске Вы найдете исходные тексты проектов, которые написаны в книге. Издание предназначено для программистов.

Привязка данных в Windows Forms — Брайан Нойес

Практически всем серьезным приложениям Windows необходимо использовать данные, которые хранятся в базах данных, и обеспечивать взаимодействие пользователя с вышеуказанными данными. Именно тут начинают работать средства и механизмы привязки данных, которым полностью посвящено издание «Привязка данных в Windows Forms». В ней детально описаны все нюансы привязки данных на вышеуказанной платформе. В этой книге описываются средства, которые обеспечивают связь с БД, такие, как адаптеры таблиц и типизированные наборы данных, привязываемые к данным компоненты управления, методики и средства обработки ошибок, интерфейсы и события привязки данных. Здесь даются подробные инструкции и советы по работе со средствами Microsoft Visual Studio, предназначенными для привязки данных. Отметим, что большое внимание в описываемом издании уделяется нововведениям, таким, как элемент управления DataGridView и адаптеры таблиц. В данной книге обсуждается написание специальных пользовательских объектов и элементов управления, которые пригодны для привязки данных. Необходимо сказать, что в приложениях рассматриваются различные параллельные вопросы, которые связаны с привязкой данных, например, доступ информационным данным в ADO.NET и привязка в ASP.NET. Эта книга в первую очередь адресована программистам, которые занимаются написанием клиентских приложений для баз данных.

Программирование с использованием Microsoft Windows Forms — Чарльз Петцольд

В книге «Программирование с использованием Microsoft Windows Forms» детально повествуется о создании программ для ОС Windows с применением библиотеки классов Windows Forms, которая входит в .NET Framework 2.0, и языка C#. Прочитав эту книгу, Вы сможете научиться комбинировать уже существующие и создавать новые нестандартные элементы управления, и даже разрабатывать меню, панели инструментов и строки состояния, применяя новинки, которые появились в .NET Framework 2.0. Из этой книги Вы узнаете об инновационном механизме динамического размещения компонентов управления на форме, а также о привязке различных элементов управления к данным. Описываемая книга состоит из семи глав и адресована программистам, которые хотят освоить новые возможности, предлагаемые .NET Framework 2.0, разработчикам, обладающим достаточным опытом программирования для Windows и всем тем, кто хочет максимально эффективно и быстро освоить Windows Forms.

Программирование для Microsoft Windows на С# — В 2-х томах — Том 1 — Петцольд Ч.

Название: Программирование для Microsoft Windows на С# — В 2-х томах — Том 1.

Автор: Петцольд Ч.

Ч. Петцольд, известный автор и один из пионеров Windows-программирова- ния, в этой книге подробно и доходчиво рассказывает о возможностях Windows Forms — библиотеки классов Windows нового поколения для платформы .NET. Вы узнаете, как создавать динамические пользовательские интерфейсы, реализовывать графический вывод, управлять клавиатурой, мышью и таймером на С#. Подробное описание языковых конструкций, сравнение их с другими популярными языками программирования и примеры программ помогут вам быстро освоить этот новый объектно-ориентированный язык. В книге подробно рассмотрена иерархия классов .NET Framework, благодаря чему вы сможете приступить к разработке собственных программ с применением Windows Forms.

Оглавление 1-го тома
Введение XIII
Глава 1 Работаем с консолью
Глава 2 Hello, Windows Forms
Глава 3 Основные структуры
Глава 4 Упражнение по выводу текста
Глава 5 Линии, кривые и заливка областей
Глава 6 Работа с клавиатурой
Глава 7 Страницы и преобразования
Глава 8 Приручение мышы
Глава 9 Текст и шрифты
Глава 10 Таймер и время
Глава 11 Изображения и битовые карты
Приложение Б Математические функции
Приложение В Работа со строками

Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Программирование для Microsoft Windows на С# — В 2-х томах — Том 1 — Петцольд Ч. — fileskachat.com, быстрое и бесплатное скачивание.

Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России. Купить эту книгу

Книги по Windows Forms на C#. Какие?

Сейчас самостоятельно изучаю C# (по Шилдту), но в этой книге рассматривается создание только консольных приложений

Подскажите пожалуйста, какую почитать литературу (на русском) по созданию приложений Windows Forms на C#?

По самому C# учебников в сети тьма, а по Windows Forms нашел только учебник Лабора (2003 г. издания). Ну либо самоучители, которые показывают не дальше чем Hello World, либо непонятный новичку msdn.

з.ы. По тостеру естественно искал, но вся литература, что на русском языке идет исключительно по C#, а не по созданию на нем Windows-приложений.

  • Вопрос задан более трёх лет назад
  • 11741 просмотр

> потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее
Не врите.
Быстрее — это смотря что писать.
На уровне простого дефолтного GUI без весьма активной перерисовки местами — явно быстрее Winforms, а WPF будет медленно грузиться и жрать ОЗУ.
Если куча свистоперделок, анимаций, или 3D — то WPF.

Мощнее (гибче в плане свистоперделок и прочих нестандартных возможностей) — да.
Но Winforms попроще, поудобнее будет. Попроще — особенно для новичка. Поудобнее — особенно на слабых компах, где WPFовский WYSIWYG тоже будет тормозить.

> WinForms не развивается дальше, в отличии от WPF
WPF развивается дальше? Это параллельно UWP что ли?
А сторонние решения для Winforms — Telerik, DevExpress, тоже не развиваются?

Роман: как вы все зае. достали твердить заученные фразочки про аппаратную отрисовку. Наслушались их от MS или еще кого — и твердите. Ну не знаете вы недр Winforms и WPF, тем более недр винды, так и не лезли бы. Только позориться перед путными разрабами, которые аж до уровня байт и бит углубиться могут при необходимости.

Алгоритмы отрисовки — лишь малая часть GUI-фреймворка. В WPF еще куча всего, о чем вы представления не имеете. А ведь оно там убого сделано, и вот, например, нагрузка на ОЗУ обычно получается выше, это без проблем проверяется тестами. Выделение памяти разве не занимает время?
Еще DirectX медленно грузится, это и в WPF перекочевало.
И др.
И компенсировать все эти тормоза скоростью отрисовки — возможно далеко не в любом приложении.
Млять, хотя бы элементарные тесты с профилированием провели, хоть бы открыли диспетчер задач и глянули, прежде чем пиндеть чухню не пойми откуда взятую.

> Да параллельно UWP.
Пруф?
И какие новые реально стоящие фичи появились в WPF в 2015-2016?

> потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее
Горе-преподаватель сморозил лажу.
Быстрее — это смотря что писать.
На уровне простого дефолтного GUI без весьма активной перерисовки местами — явно быстрее Winforms, а WPF будет медленно грузиться и жрать ОЗУ.
Если куча свистоперделок, анимаций, или 3D — то WPF.

Мощнее (гибче в плане свистоперделок и прочих нестандартных возможностей) — да.
Но Winforms попроще, поудобнее будет. Попроще — особенно для новичка. Поудобнее — особенно на слабых компах, где WPFовский WYSIWYG тоже будет тормозить.

> WinForms не развивается дальше, в отличии от WPF
WPF развивается дальше? Это параллельно UWP что ли?
А сторонние решения для Winforms — Telerik, DevExpress, тоже не развиваются?

Спасибо за развернутый ответ!

Но половину терминологии я совершенно не понял.

Давайте немного конкретизирую:

Я изучаю программирование, чтобы создавать Desktop-приложения, позднее Web-приложения и (возможно) сайты. До этого с программированием вообще не сталкивался. Выбрал для изучения C# и начал его учить по книге Шилдта. Но беда в том, что в его книге рассматриваются исключительно консольные приложения.

С одной стороны я понимаю, что в Шилдте дан фундамент C# — операторы там, литералы, переменные. Но с другой стороны мне этого явно недостаточно для создания Desktop-приложений.

Вопрос: Как создавать десктоп-приложения на C#? Что для этого использовать? Конечно хочется, чтобы технология для создания была наиболее актуальной и я мог в дальнейшем долго пользоваться этими знаниями.

Newbie1: > мне этого явно недостаточно для создания Desktop-приложений
Для создания Desktop-приложений нужен GUI-фреймворк.
Ваши Winforms и WPF — это 2 различных GUI-фреймворка, доступных на C#.
Что такое GUI — погуглите.
Что такое фреймворк — тоже погуглите.
Заодно начнете разбираться с терминологией.

> Как создавать десктоп-приложения на C#?
Ну, для начала надо в VS создать проект типа «Приложение Windows Forms» или «Приложение WPF».

> Что для этого использовать?
Из моего ответа вроде ясно, что и Winforms и WPF имеют право на жизнь, но для новичка проще Winforms, а если комп слабый, то еще и физически легче.

> хочется, чтобы технология для создания была наиболее актуальной и я мог в дальнейшем долго пользоваться этими знаниями
То есть хотите зациклиться на одной технологии?
Каждый инструмент — для своего круга задач. Чем меньше инструментов, тем уже круг задач.
Вас устроит быть ограниченным? Если да, то круг задач сделайте узким. Где будете работать, что именно писать и т.д.

WinForms может быть быстрее, если приложение простое. Если приложение хотя бы среднее, то WPF будет быстрее. Под «быстрее» я понимаю и быстродействие самого приложения, и скорость разработки, и время изменений в проекте. Вы же сами сказали — «смотря что писать». Сделать на WinForms решение квадратного уравнения будет быстрее (и то, не факт). Про «жрать ОЗУ» тоже не факт, это сильно зависит от того, как сделано и что сделано.

На чём быстрее писать код — на Visual Studio 2008 или Visual Studio 2015? «Восьмёрка» неизмеримо быстрее запускается, скорость работы быстрее (но уже не так сильно). Но насколько «пятнадцатая» даёт скорости именно работы? На мощном компе работает быстро, и даёт очень много для производительности труда программиста.

WPF имеет более высокую кривую обучения, много сложных новых концепций, которых нет в WinForms. Изучить сложнее, но проще потом всё это использовать.

Вы сами в своём ответе сказали, что в WPF во многом лучше. Но ваш опыт будет в том, что вам это удобнее. Пусть так, я не против. Мой опыт в том, что на WPF я сделаю быстрее, используя MVVM, DI с IoC, интерфейсами, биндингами, конвертерами и пр. Особенно, когда проект развивается, изменяется.
Telerik, DevExpress — это не Microsoft, это внешние решения. К тому же, многие из вещей работают и в WinForms, и в WPF, и в Silverlight.

Ну и последнее. Сколько проектов (новых) начинается с WinForms, и сколько с WPF? То-то и оно.

В общем, для начинающего программиста полезнее изучать сразу WPF, чем WinForms.

0 / 0 / 0

Регистрация: 25.02.2020

Сообщений: 6

1

04.03.2020, 15:31. Показов 667. Ответов 5


Здравствуйте, посоветуйте литературу по WindowsForm C#. Спасибо!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

04.03.2020, 15:31

Ответы с готовыми решениями:

Литература по Forms
Доброго времени суток,нужна мелкая помощь с литературой по формам.
Охота найти адекватную…

Литература по Windows Forms
Здравствуйте! Подскажите пожалуйста литературу по C# Windows Forms, интересует именно создание GUI…

Нужна литература по Windows Forms
Здравствуйте, господа. Есть ли на просторах интернета более-менее вменяемая литература/мануал, как…

libcurl in win forms
При создании пустого проекта и подключении libcurl все работает на ура,при использовании libcurl в…

5

3 / 3 / 1

Регистрация: 04.04.2018

Сообщений: 351

04.03.2020, 15:36

2

Новых книг по WinForms нет, потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее. WinForms не развивается дальше, в отличии от WPF.
Единственно, если вы думаете делать программы не на Windows, а на Линукс, то да — WinForms. Но если под винду, то WPF.



0



Фрилансер

761 / 458 / 146

Регистрация: 06.01.2017

Сообщений: 4,814

04.03.2020, 15:52

3

Цитата
Сообщение от dimmarvel
Посмотреть сообщение

Единственно, если вы думаете делать программы не на Windows, а на Линукс, то да — WinForms. Но если под винду, то WPF.

WinForms под Linux?)))



0



113 / 89 / 26

Регистрация: 11.12.2018

Сообщений: 331

05.03.2020, 06:39

4

Думаю вам будет полезна вот эта книга Брайан Нойес «Привязка данных в Windows Forms».
Сейчас, как вам правильно написали используют WPF, хотя я себя никак не могу заставить уйти от Windows Forms.



0



1642 / 1091 / 487

Регистрация: 17.07.2012

Сообщений: 5,345

05.03.2020, 14:10

5

Цитата
Сообщение от FateOri
Посмотреть сообщение

WinForms под Linux?)))

В Mono есть, правда на его развитие забили.

Цитата
Сообщение от dimmarvel
Посмотреть сообщение

Единственно, если вы думаете делать программы не на Windows, а на Линукс

AvaloniaUI(похоже на WPF, но кроссплатформенно, по фичам правда отстает от WPF)



1



Фрилансер

761 / 458 / 146

Регистрация: 06.01.2017

Сообщений: 4,814

05.03.2020, 15:12

6

Цитата
Сообщение от Новичок
Посмотреть сообщение

В Mono есть, правда на его развитие забили.

значит нету))

Цитата
Сообщение от Новичок
Посмотреть сообщение

AvaloniaUI(похоже на WPF, но кроссплатформенно, по фичам правда отстает от WPF)

AvaloniaUI еще совсем сырое))



0



Понравилась статья? Поделить с друзьями:
  • Бот для хастл кастл скачать для windows
  • Бот для активации windows по телефону
  • Борьба с синим экраном смерти windows 10
  • Борланд делфи 7 скачать бесплатно для windows 10
  • Бордерлендс 3 не запускается на windows 10 висит в фоновом режиме