2. Работа с наборами типизированных данных

Использование контейнеров планировки

эти три элемента управления являются

Элементы управления FlowLayoutPanel, TableLayoutPanel И SplitCon — Tainer Могут быть исключительно полезны для создания сложных размещений элементов управления на формах с минимальными усилиями. Эти три элемента управления являются новыми в. NET 2.0. Элемент управления FlowLayoutPanel Позволяет вам осуществить поведение, сходное с поведением планировки по умолчанию для Web-страниц. А именно, любые элементы управления в FlowLayoutPanel Будут реорганизовывать себя так, чтобы заполнить область контейнера непрерывным потоком слева направо в том порядке, в каком они добавлялись в контейнер, и с переходом на новый ряд, когда больше не будет места справа. Это поведение по умолчанию, но вы можете также модифицировать свойство Flow — Direction, Установив его равным одному из перечислимых значений Left — ToRight , TopDown, RightToLeft Или BottomUp. Элемент управления TableLayoutPanel Позволяет осуществлять табличное размещение элементов управления, где они сохраняют свое положение относительно друг друга и образуют на форме таблицу или сетку. Вы можете использовать этот элемент управления, чтобы достигнуть того эффекта, для которого проектировщики развитых Web-страниц используют таблицы в HTML. Вы можете вкладывать табличные элементы управления планировки в ячейки других табличных элементов управления планировки, поучая сложную, но хорошо организованную планировку элементов управления, которая разумно ведет себя при изменении размеров формы. Это особенно полезно для сценариев локализации, где метки или текст в элементах управления будут определяться динамически из файлов ресурсов или из базы данных, а соответствующий элемент управления будет автоматически изменять свой размер в зависимости от высоты или ширины своего содержания.

Программное добавление строк

в большинстве случаев это делается

Как только вы определили столбцы сетки, можно программно добавлять к ней строки. В большинстве случаев это делается при помощи метода Add Коллекции Rows Сетки. Когда вы добавляете строку таким образом, типы ее ячеек будут определяться в соответствии с шаблонами ячеек, которые были специфицированы при создании столбцов. Каждая ячейка будет иметь значение по умолчанию, зависящее от типа ячейки и соответствующее, как правило, пустой ячейке. Различные перегрузки метода Add Позволяют вам добавлять единственным вызовом несколько строк или передавать методу уже созданную строку. Элемент управления DataGridView Поддерживает также создание гетерогенных столбцов, в том смысле, что такой столбец может иметь ячейки различных типов. Для создания гетерогенных столбцов нужно сначала конструировать строку, не прикрепляя ее к сетке. После этого вы добавляете к строке желаемые ячейки, а затем добавляете новую строку к сетке. Например, следующий код добавляет к строке в качестве первой ячейки комбинированное поле, вводит в него пару элементов, добавляет для остальных четырех ячеек текстовые поля, после чего добавляет строЧтобы добавить к сетке такую строку, сетка должна быть уже инициализирована набором столбцов, которые она будет содержать по умолчанию. Кроме того, число ячеек в добавляемой строке должно соответствовать числу столбцов по умолчанию. В показанном коде неявно добавляется пять столбцов с текстовыми полями, а затем в качестве первой строки сетки добавляется гетерогенная строка, в которую перед этим добавляются конструируемые по отдельности ячейки.

Динамическое определение свойств источника данных

когда вы создаете специальные элементы

Следующем требованием к фильтрующей сетке, которым мы займемся, будет возможность динамического заполнения комбинированного поля M ComboBox В элементе управления FilteredGrid Именами столбцов или свойств элементов данных в привязанном источнике данных. Когда вы создаете специальные элементы управления, которые, как этот, поддерживают привязку данных, вы должны по возможности не делать никаких предположений о действительных типах данных, привязываемых к вашему элементу управления. Например, один из путей решения обсуждаемой задачи — это сказать, что ваш элемент управления можно будет привязывать только к объектам DataTable , И поэтому вам достаточно просто привести DataSource К типу DataTable, Обратиться к его коллекции Columns И получить имена столбцов из объектов DataColumn Этой коллекции. Проблема такого подхода в том, что никто просто не сможет использовать ваш элемент управления с коллекцией специальных рабочих объектов, что является случаем применения, который вы должны поддерживать точно так же, как его поддерживают привязанные к данным элементы управления из Framework. Поскольку привязанная к данным часть вашего элемента управления состоит из сетки и источника привязки, заботу о деталях привязки к разнообразным коллекциям данных можно предоставить источнику привязки, с чем он прекрасно и справляется. Однако у вас должна быть возможность заглянуть внутрь любой коллекции, привязанной к источнику привязки, и определить имена столбцов или свойств каждого из элементов данных в коллекции, причем это нужно сделать таким образом, чтобы о типе объекта ничего заранее не предполагалось. Является ли источник данных набором данных, таблицей данных или коллекцией рабочих объектов, ваш код должен обращаться с ним соответственно, желательно без написания множества условных проверок, выясняющих принадлежность к определенным типам. К счастью, Framework предусматривает поддержку именно для этого в форме дескрипторов свойств. Воспользовавшись статическим методом GetProperties Класса TypeDescriptor, Можно получить экземпляр Proper TyDescriptorCol Lection, Содержащий дескрипторы для всех свойств объекта вне зависимости от того, является ли он строкой в таблице или же экземпляром рабочего объекта.

Контекстная вкладка элемента управления

вы можете также перетаскивать их

Когда вы поместили элементы управления на форму, вы можете перетаскивать их мышью, чтобы изменить их расположение на форме. Вы можете также перетаскивать их углы или кромки, чтобы желаемым образом изменить их размер. Обратите внимание, что когда вы перетаскиваете элемент управления, появляются линии привязки, чтобы помочь вам выровнять перетаскиваемый элемент управления с другими элементами управления на форме. Эти тонкие синие и пурпурные линии протягиваются между перетаскиваемым элементом управления и другими элементами либо кромками формы. Они помогают вам точно выровнять верх, низ и боковые стороны элементов управления, также как и базовую линию текста в элементах управления. Когда вы подобным образом перетаскиваете элементы управления или компоненты на форме, вы в действительности объявляете и инициализируете элементы-переменные класса формы, используя визуальное представление этих операций. Вскоре вы увидите генерируемый при этом код, но окончательный результат очень похож на то, что вы закодировали в предыдущем разделе вручную. 1. Выберите в окне Toolbox группу Data, чтобы отобразить палитру компонентов данных. Перетащите на форму компонент DataSet, После чего появится диалог, позволяющий настроить вид набора данных, который будет добавлен. Для настоящего примера выберите Untyped Dataset, и к форме будет добавлен элемент набора данных.

Он отображается в нижней части конструктора в лотке компонентов, и его именем по умолчанию является DataSetl. Все компоненты, которые добавляются посредством конструктора и не имеют графического представления времени выполнения, помещаются в лоток компонентов. Это позволяет вам все равно выбирать их и оперировать любыми характеристиками времени проектирования, которыми они обладают, а также устанавливать их свойства в окне Properties. Установите свойства элементов управления, которые вы создали путем сбрасывания их на форму. Некоторые из свойств устанавливаются конструктором автоматически в зависимости от ваших манипуляций с элементом управления, например, свойства Size И Location. Если окно Properties не отображается в IDE, сделайте его видимым, выбрав Properties Window в меню View или нажав F4.

Простое приложение WinFx

корень иерархии типов для пользовательских

Чтобы начать программировать приложения WinFx, вам следует освоиться с некоторыми объектными типами, которые вы будете использовать при создании приложения. Корень иерархии типов для пользовательских интерфейсов WinFx находится в пространстве имен System.Windows . На верхнем уровне находится объект Application, Сходный с объектом приложения в Windows Forms, но определяемый как отдельный тип в пространстве имен System.Windows. Имеется несколько производных классов приложения, специализированных для различных видов приложений, например, класс NavigationApplication, С которым вы встретитесь в одном из дальнейших примеров. В рамках приложения вы создаете объекты System.Windows. Window, Которые будут содержать страницы и элементы управления, образующие его пользовательский интерфейс. Элементы управления собраны в иерархию, называемую визуальным деревом, где любой отдельный элемент может отображать свою собственную область клиента, содержать другие элементы управления, делать и то, и другое или не отображать ничего. Такая концепция открывает очень гибкий и мощный подход к объявлению и построению пользовательского интерфейса, поскольку вы фактически можете расширять функции элемента управления, придавая ему различное содержание. Например, в Windows Forms класс Button Позволяет вам добавлять к формам кнопки, которые могут содержать текстовую подсказку, изображение или и то, и другое. Вы задаете, что будет содержать кнопка, устанавливая явные свойства класса для тех визуальных элементов, которые поддерживаются данным элементом управления при отображении его области клиента. В случае кнопки WinFx, как и многих других элементов управления, вы можете добавлять к кнопке дочерние элементы произвольной сложности, и каждый из них будет вызываться для отображения своей собственной области клиента. Посредством задания стилей вы можете динамически определять элементы содержания и устанавливать свойства, воздействующие на их внешний вид и поведение.