Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Стандартные диалоговые панели общего назначения.





Исходя из иерархии классов в пространстве имен System.Windows.Forms.Controls (рис. 6.), можно отметить, что в состав класса CommonDialog входит восемь компонентов, реализующих стандартные диалоговые панели, используемые Windows-приложениями. Эти компоненты расположены в панели компонентов на странице Dialogs.

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

 

 

 

Рис. 6. Иерархия классов в пространстве имен System.Windows.Forms.Controls.

 

OpenFileDialog

Позволяет выбрать открываемый файл по заданному шаблону.

Свойство FileName задает название файла, которое будет находиться в поле "Имя файла:" при появлении диалога.

Свойство Filter задает ограничение файлов, которые могут быть выбраны для открытия — в окне будут показываться только файлы с заданным расширением. Через вертикальную разделительную линию можно задать смену типа расширения, отображаемого в выпадающем списке "Тип файлов". Здесь введено Text Files (*.txt)|*.txt|All Files(*.*)|*.* что означает обзор либо текстовых файлов, либо всех.

Свойство InitialDirectory позволяет задать директорию, откуда будет начинаться обзор. Если это свойство не установлено, исходной директорией будет рабочий стол.

SaveFileDialog

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

Свойства аналогичны OpenFileDialog.

ColorDialog

Диалоговое окно ColorDialog содержит список цветов, которые могут быть применены к тексту, но предлагаемый список ограничен.

Более интересной представляется возможность назначать ользовательский цвет, который может быть определен в большом диапазоне (рис. 7):

Рис. 7. Диалоговое окно .

 

 

Комп'ютерний практикум №3. Класс DataSet. Таблицы и поля (объекты DataTable и DataColumn). Объекты DataRelation. Строки (объект DataRow). Схемы XML. Работа с XML.



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

Ход работы (первой части лабораторного занятия).

I Работа с объектами DataSet, DataView (пример, UseDataSet).

  1. Реакция на кнопку «Создать таблицу»:
    1. программно создать таблицу следующей структуры:
Название поля Описание поля Тип
teacher_id ID преподавателя int
name ФИО string

 

    1. программно заполнить данными строку таблицы.
    2. отобразить данные таблицы в dataGridView1.
  1. Реакция на кнопку «Значение ячейки» - отследить положение курсора в dataGridView1 и вывести значение текущей ячейки CurrentCell в окно сообщения:

 

MessageBox.Show( t.Rows[…][…].ToString());

  1. Реализовать фильтрацию и сортировку данных - используя свойства Sort и RowFilter класса DataView:
    1. Создать DataView описанной таблицы
    2. Реакция на кнопку «Сортировать»: осуществить сортировку по столбцу, имя которого введено в соответствующее поле ввода (по убыванию/возрастанию)
    3. Реакция на кнопку «Фильтр»: аналогично предыдущему, используя RowFilter.

II Задание Expression в таблице, используя визуальные средства разработки.

1. Открыть приложение UseDataSet.

  1. Добавить в проект новый элемент ПКМ → Add → New Item → DataSet → дать имя MyData.
  2. Перетащить с панели инструментов ToolBox два элемента DataTable.

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

 

5.1. Описание структуры таблицы «Order»:

Название поля Описание поля Тип Ключ Expression
OrderID номер заказа System.Int32 РК  
Amount общая сумма заказов System.String   Sum(Child(Order_OrderLines).total)

 

5.2. Описание структуры таблицы «OrderLines»:

Название поля Описание поля Тип Ключ Expression
OrderLineID №п/п System.Int32 РК  
OrderID номер заказа System.Int32  
price цена за ед. System.Decimal    
quantity кол-во System.Decimal    
total сумма = price*quantity System.Decimal   price*quantity

 

5. Разместить на форме, на третьей вкладке UsingExpression два элемента dataGridView.

6. Программно на кнопке «Создать таблицу» задать связь с таблицами:

MyData md = new MyData();

 

dataGridView2.DataSource = md;

dataGridView2.DataMember = "Order";

 

dataGridView3.DataSource = md;

dataGridView3.DataMember = "OrderLines";

Проверить выполнение заданных выражений введением данных.

 

Теоретические сведения:

1 Класс DataSet.

Обобщенная схема модели автономных объектов представлена на рис. 1

 
 

 

 


Рис. 1. Классы автономных объектов

Класс DataSet является ядром автономного режима доступа к данным в ADO.NET. Доступен из пространства имен System.Data.DataSet, находящегося над всеми поставщиками данных, что делает его независимым:

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

· можно загрузить данные из любого источника (SQL Server, Access или XML-файл и др.)

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

 

DataSet состоит из объектов типа:

· DataTable– объекты, описывающие все таблицы, которые хранятся в DataSet;

· DataRelation– объекты, описывающие связи между таблицами.

 

Объекты типа DataSet можно создавать одним из четырех способов:

· программным путем;

· используя графическую утилиту из пакета Microsoft Visual Studio .NET;

· генерировать при создании объекта DataAdapter;

· загружать структуру и данные в DataSet из XML-файлов.

 

В дальнейшем, будут рассматриваться способы создания объектов только программным путем.

Объект DataSet создается следующим образом:

DataSet d = new DataSet();

а) состоит из набора таблиц (типа DataTable): свойство Tables объекта DataSet возвращает объект типа DataTableCollection. Для того, чтобы добавить таблицу в коллекцию, используется метод Add():

d.Tables.Add ( new DataTable() );

В качестве параметров метода передают либо имя нового DataTable коллекции, либо вызывают этот метод без параметров, тогда имя нового объекта будет Table№. Объект типа DataTable может принадлежать только одному объекту типа DataSet, иначе будет вызвано исключение ArgumentExeption. При попытке добавить таблицу с дублирующимся именем, произойдет исключение DublicateNameExeption.

б) состоит из набора связей (типа DataRelation) между двумя таблицами посредством объектов DataColumn: свойство Relations объекта DataSet возвращает объект типа DataRelationCollection.

Класс DataTable (таблицы)

Объект типа DataTable представляет собой таблицу базы данных. Такой объект может быть создан путем запроса к базе данных или программно, как показано далее:

//создание таблицы

DataTable t = new DataTable();

//создание полей (колонок) с помощью конструктора

DataColumn dc = new DataColumn(“height”, System.Type.GetType(“System.Int32”));

DataColumn dc1 = new DataColumn(“name”, System.Type.GetType(“System.String”));

//добавление этих полей в таблицу

t.Columns.Add(dc);

t.Columns.Add(dc1);

Для получения совокупности столбцов объект DataTable имеет свойство Columns, возвращающее DataColumnCollection, которое в свою очередь состоит из объектов типа DataColumn. Каждый объект DataColumn представляет собой отдельный столбец таблицы, из которого можно получить любую запись.

Объект DataTable содержит ссылки на объекты, которые описывают структуру таблицы, и ее данные. Для этой цели объект типа DataTable состоит из нескольких коллекций, приведенных в табл.1.

Таблица 1. Коллекции объекта типа DataTable.

Коллекция Описание
Columns это коллекция содержит специальные объекты, которые имеют тип DataColumn и представляют собой описание конкретного столбца в таблице. Эти данные включают имя столбца, тип данных, а также информацию о том, могут ли храниться в этом столбце значения типа NULL
Row в отличие от объектов типа DataColumn, которые содержат информацию о столбцах, эта коллекция содержит объекты, которые не описывают информацию об объекте DataTable, а содержат реальные данные из таблицы. Эти объекты имеют тип DataRow
Constraints включает коллекцию объектов типа Constraint. Каждый из таких объектов описывает ограничение на один или несколько столбцов в таблице. Класс Constraint является абстрактным, поэтому в качестве конкретных объектов в этой коллекции могут использоваться экземпляры класса, порожденные от класса Constraint
ChildRelations именно эта коллекция содержит данные о связях между таблицами. Экземплярами этой коллекции являются объекты класса DataRelation, которые позволяют устанавливать связи между основным ключом одной таблицы и вторичным другой. Используйте это объект, чтобы запрограммировать получение данных из дочерней таблицы на основании записи из главной, либо наоборот, по данным из записи в дочерней таблице выбрать данные из родительской
PrimaryKey содержит массив колонок, которые являются первичным ключом для таблицы, т.е. для хранения информации о первичном ключе необходимо использовать свойство DataTable.PrimaryKey, которое хранит массив объектов DataColumn.  

 

Различия между двумя схожими методами объекта класса DataTable приведены в таблице 2.

Таблица 2. Описание методов Clone() и Copy().

Метод Описание
Clone() этот метод позволяет создавать новый объект типа DataTable, который имеет структуру, полностью повторяющую структуру родительского объекта. Этот метод копирует только структуру объекта и не копирует данные, которые, возможно в нем содержатся.
Copy() этот метод создает новый объект типа DataTable, который имеет структуру, повторяющую структуру родительского объекта, а также содержит данные, которые являются копиями данных родительского объекта DataTable.

 

1.1.1 Столбцы (объект Columns).

Объект типа DataColumn - это объект, содержащий информацию о колонке таблицы, и является основой для создания структуры объекта типа DataTable.

Конструктор класса DataColumn может принимать до четырех параметров.

Основные свойства класса DataColumn представлены в таблице 3.

Таблица 3. Свойства класса DataColumn

Название Описание
AllowDBNull это свойство позволяет устанавливать и получать значение типа bool, которое определяет, может ли в колонке содержаться значение NULL. В случае если свойство AllowDBNull установлено в true, то в колонке допускается хранение значений NULL, в случае false – не допускается. В случае если колонка является первичным ключом или входит в составной первичный ключ, то это свойство должно быть установлено в false (это делается автоматически при создании первичного ключа). По умолчанию это свойство установлено в значение true.
AutoIncrement содержит значение типа bool. В случае если значение установлено в true, то соответствующая колонка увеличивает свое значение автоматически для каждой новой записи. Это свойство удобно использовать для создания ключевых полей.
AutoIncrementSeed это свойство задает начальное значение, с которого начинают увеличиваться значения для новых записей в столбце со свойством AutoIncrement = true
AutoIncrementStep это свойство определяет значение, на которое увеличивается поле в новой записи для столбца со свойством AutoIncrement = true
DataType позволяет устанавливать и получить тип данных, которые хранятся в колонке. Тип значения должен совпадать с типом, установленным для колонки. Тип объекта в этом свойстве описывается классом Type
DegoultValue позволяет задавать значение по умолчанию для новых записей в указанной колонке. Тип значения должен совпадать с типом, установленным для колонки. В случае несоответствия типов будет брошено исключение InvalideCastExeption.
Expression содержит выражение, которое может использоваться для фильтрации, агрегирования и создания вычисляемых колонок.
MaxLength это свойство используется только для текстовых полей и определяет максимальную длину поля
Ordinal возвращает порядковый номер столбца
ReadOnly определяет возможность редактирования значений в колонке
Table возвращает ссылку на таблицу, к которой данная колонка была добавлена
Unique содержит значение типа bool, которое определяет колонку как содержащую уникальные значения, в случае, если свойство установлено в true.

 

1.1.2 Строки (объект Row)

Свойство Rows объекта DataTable возвращает совокупность всех строк таблицы — DataRowCollection. Это свойство следует применять для того, чтобы пользоваться результатами запросов к базе данных. В ADO.NET нет необходимости в итерационном обходе DataSet для получения данных. Вы можете обращаться к записям таблицы как к элементам простого массива. Это значительно упрощает процесс доступа к элементам базы.

Добавление данных.

Осуществляется использованием метода NewRow(). Он не добавляет новую строку, а лишь возвращает ссылку на объект типа DataRow, который имеет ту же структуру, что и объект таблицы, у которой этот метод был вызван.

// получение прототипа строки

DataRow dr = t.NewRow();

 

Добавление строки возможно с помощью метода Add(). Метод принимает параметры в виде массива элементов типа object. В качестве значений этот массив содержит поля новой строки. Необходимо помнить, что при добавлении строки таким образом, вместо полей, являющихся счетчиками, следует указывать значение null.

//задание значений строке

dr["height"] = 180;

dr["name"] = "Иван Иванович";

//добавить строку к таблице

t.Rows.Add(dr);

 

Т.е. наполнение DataTable данными осуществляется последовательностью действий:

 

// задание второй строки

dr = d.NewRow();

dr["height"] = 175;

dr["name"] = "Петр Петрович";

t.Rows.Add(dr);

 

Заполнение полей.

Для доступа к полям строки используются индексаторы (заключенные в [ ]). При этом, можно использовать как имя соответствующей колонки, так и ее порядковый номер.

// выберем для работы строку 3

DataRow dr = t.Rows[2];

dr["height"] = 10;

dr["name"] = "Vasya";

 

// либо можно написать по другому

t.Rows[2]["height"] = 10;

//или

t.Rows[2][0] = 10;

Изменение данных.

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

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

Таблица 4. Методы класса DataRow, позволяющие отключить сообщения.

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

Состояния строки.

Метод Delete() объекта DataRow – не удаляет строку из таблицы явно, а помечает на удаление. Это достигается путем изменения состояния строки. Перечень значений свойства RowState приведен в таблице 5.

Таблица 5. Значения свойства RowState.

Свойство Описание
Added Строка была добавлена в таблицу, но метод AcceptChanges() еще не вызывался
Deleted Строка была удалена из таблицы, но метод AcceptChanges() еще не вызывался
Datached Строка НЕ ЯВЛЯЕТСЯ ЭЛЕМЕНТОМ КОЛЛЕКЦИИ DataRows. Ее создали от имени таблицы, но не подключили
Modified Некоторые из полей строки были изменены, но метод AcceptChanges() еще не вызывался
Unchenged Строка не изменялась со времени загрузки при помощи метода Fill() либо с момента вызова метода AcceptChanges()

 

Кроме свойства RowState строка хранит также информацию о своей версии. Версию строки можно проверить с помощью метода HasVersion. Этот метод принимает в качестве параметров одно из значений перечисляемого типа DataRowVersion и возвращает true, если версии совпадают. В табл. 6 представлена структура перечисляемого типа DataRowVersion

Таблица 6. Структура перечисляемого типа DataRowVersion

Значение Описание
Current текущее значение
Default версия по умолчанию
Original начальное значение
Proposed предлагаемое значение

 

В табл. 7 представлены варианты изменения значений типа DataRowVersion

 

Таблица 7 принципы изменения значений DataRowVersion.

Объект Вызываемый метод Значение DataRowVersion
DataRow BeginEdit() для всех изменяемых значений доступны версии Current и Proposed
DataRow CancelEdit() после вызова метода значение Proposed измененных ячеек будет удалено
DataRow EndEdit() значение Proposed = Current
DataRow AcceptChanges() Proposed = Current Original не изменяется
DataTable AcceptChanges() Original = Current
DataRow RejectChanges() значение Proposed сбрасывается

 

Обработка событий

При изменении данных можно обрабатывать ряд специальных событий, которые возникают при модификации данных в таблице. Набор событий представлен в табл. 8

Таблица 8. Набор событий, возникающий при изменении данных.









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.