Prak CSharp/Presentations/Win Forms/7_WF_DataGridView.

advertisement
Элементы управления DataGrid и DataGridView
 Для работы с табличными данными в .NET Framework 1.x
использовался элемент управления DataGrid. Начиная с версии 2.0,
поддерживается более простой в использовании элемент управления
DataGridView.
 В .NET Framework 3.x элемент DataGrid поддерживается ради
совместимости с более ранними версиями. Единственная
особенность DataGrid, которая не реализована в DataGridView, иерархическое отображение информации из двух взаимосвязанных
таблиц в одном элементе управления.
 В отличие от DataGrid для отображения информации из двух
таблиц, связанных отношением master/detail, необходимо
использовать два элемента DataGridView.
 Оба элемента управления используют стандартную архитектуру
привязки данных.
Дополнительные возможности DataGridView
по сравнению c DataGrid
 DataGridView поддерживает 6 встроенных типов столбцов ( только 2 в
DataGrid).
 DataGrid отображает данные только из внешнего источника.
 DataGridView может отображать
• неподсоединенные данные (unbound data), которые хранятся в
самом элементе управления;
• данные из подсоединенного источника;
• те и другие одновременно.
 Класс DataGridView содержит множество свойств и событий для
форматирования и управления отображением данных.
 DataGridView позволяет зафиксировать (freeze) строки и столбцы и
тем самым запретить их прокрутку; спрятать(hide) строки, столбцы и
заголовки; предусмотреть подсказки (ToolTips) и меню (shortcut menus )
для отдельных ячеек, строк и столбцов.
Инициализация DataGridView
 Элемент управления DataGridView можно инициализировать без
использования подсоединенного источника данных, путем добавления
столбцов и строк в коллекции DataGridView.Columns и
DataGridView.Rows.
 Можно заполнить DataGridView данными из подсоединенного
источника. В классе определены свойства
object DataSource { get; set; }
string DataMember { get; set; }
Источник данных для DataGridView.
Имя таблицы или свойства для источников
данных, которые содержат несколько
таблиц или списков. Значение по
умолчанию string.Empty.
Источник данных для DataGridView
 Класс DataGridView использует стандартную модель привязки
данных, согласно которой источник данных может быть объектом
любого типа, реализующего один из следующих интерфейсов:
• IList ( коллекции с IList, одномерные массивы);
• IListSource ( типы DataTable и DataSet);
• IBindingList ( класс BindingList<(Of <(T>)>) ;
• IBindingListView ( класс BindingSource).
 Рекомендуется использование BindingSource. Для источников с
несколькими таблицами или списками можно использовать свойство
DataMember объекта BindingSource для конкретизации источника.
 Если в качестве источника данных используется коллекция объектов
( а не данные, полученные из базы данных) следует присвоить
свойству DefaultCellStyle.DataSourceNullValue значение null (вместо
значения по умолчанию DBNull.Value).
Архитектура элемента управления DataGridView
DataGridViewElement
DataGridViewBand
DataGridViewColumn
DataGridViewCell
DataGridViewRow
DataGridViewButtonCell
DataGridViewButtonColum
DataGridViewCheckBoxCell
DataGridViewCheckBoxColumn
DataGridViewComboBoxCell
DataGridViewComboBoxColumn
DataGridViewImageCell
DataGridViewImageColumn
DataGridViewLinkCell
DataGridViewLinkColumn
DataGridViewTextBoxCell
DataGridViewTextBoxColumn
DataGridViewHeaderCell
DataGridViewRowHeaderCell
DataGridViewColumnHeaderCell
DataGridViewTopLeftHeaderCell
Класс DataGridView
public class DataGridView : public Control, ISupportInitialize
 Свойства класса для доступа к коллекциям столбцов(column),
строк(row) и ячейке(cell).
DataGridViewColumnCollection
Columns { get; }
Коллекция столбцов таблицы.
Класс DataGridViewColumnCollection
реализует интерфейсы IList, ICollection и
IEnumerable.
DataGridViewRowCollection
Rows { get; }
Коллекция строк таблицы.
Класс DataGridViewRowCollection реализует
интерфейсы IList, ICollection и IEnumerable.
DataGridViewCell Item
[ int columnIndex, int rowIndex ]
{ get; set; }
DataGridViewCell Item
[ string columnName, int rowIndex ]
{ get; set; }
Ячейка таблицы на пересечении столбца и
строки.
Класс DataGridView
 Свойства для доступа к текущей (current) строке и ячейке.
DataGridViewRow
CurrentRow { get; }
Строка, содержащая текущую ячейку.
DataGridViewCell
CurrentCell { get; set; }
Текущая ячейка.
Point CurrentCellAddress
{ get; }
Индексы столбца (X) и строки (Y) текущей
ячейки.
Класс DataGridViewColumn
 Класс DataGridViewColumn определяет внешний вид и
функциональность ячейки таблицы.
 В классе определены два открытых конструктора – без параметров
и конструктор
DataGridViewColumn( DataGridViewCell cellTemplate );
который присваивает значение cellTemplate свойству, определяющему
шаблон для всех ячеек в столбце.
virtual DataGridViewCell
CellTemplate { get; set; }
Шаблон для всех ячеек в столбце. Значение
по умолчанию null.
string DataPropertyName
{ get; set; }
Имя свойства или столбца таблицы в
источнике данных для заполнения столбца.
Type ValueType { get; set; }
Тип значений в ячейках столбца.
Класс DataGridViewRow
 Класс DataGridViewRow содержит коллекцию ячеек, которые
находятся в строке, и используется для доступа к отдельной ячейке.
 Класс имеет только один открытый конструктор без параметров.
DataGridViewCellCollection
Cells { get; }
Коллекция ячеек в данной строке таблицы. Класс
DataGridViewCellCollection реализует интерфейсы
IList, ICollection и IEnumerable.
В коллекции определен индексатор с параметром
типа string, который дает доступ к значению в
ячейке по имени столбца.
bool IsNewRow { get; }
true, если это последняя строка DataGridView, в
которую вводятся значения.
bool SetValues
( object[] values );
Метод дает возможность присвоить значения всем
ячейкам строки. Если число элементов массива не
совпадает с числом ячеек, метод возвращает
значение false.
Класс DataGridViewCell
 Класс описывает отдельную ячейку элемента управления
DataGridViewCell.
 Абстрактный класс, который имеет только защищенный (protected)
конструктор.
Object Value { get; set; }
Значение в ячейке DataGridView.
virtual Type ValueType { get; set; }
Тип значения ячейки. Если не
установлен для конкретной ячейки,
используется тип данных столбца.
Object FormattedValue { get; }
Значение в ячейке DataGridView, после
форматирования.
virtual Type FormattedValueType { get; }
Тип отформатированного значения в
ячейке.
Типы столбцов в DataGridView
DataGridViewTextBoxColumn
Создается автоматически для строк и
чисел при подсоединении источника.
DataGridViewCheckBoxColumn
Создается автоматически для
значений типа Boolean и CheckState
при подсоединении источника.
DataGridViewImageColumn
Для вывода изображений в столбце.
Создается автоматически при
соединении с массивами байт (byte
arrays), Image или Icon.
DataGridViewButtonColumn
Используется для вывода кнопок в
ячейках. Создается вручную.
Используется для вывода
DataGridViewComboBoxColumn открывающихся списков в ячейках.
Создается вручную.
DataGridViewLinkColumn
Используется для вывода ссылок в
ячейках. Создается вручную.
Тип столбца DataGridViewComboBoxColumn
 Ячейки столбца содержат элементы управления ComboBox
(открывающийся список).
 Удобно использовать для выбора элемента из конечного множества
значений.
 Нельзя создать автоматически при подсоединении источника
данных. Необходимо создать явно и добавить к коллекции столбцов
DataGridView, которая доступна через свойство DataGridView.Columns.
 Класс имеет только один открытый конструктор (без параметров) и
большую часть методов и свойств наследует от базового класса
DataGridViewColumn.
 Список встроенного ComboBox инициализируется через свойства
класса DataGridViewComboBoxColumn.
Свойства DataGridViewComboBoxColumn
Object DataSource
{ get; set; }
Источник для заполнения списка встроенного ComboBox.
Умолчание null. Список ComboBox можно задать также
через свойство Items.
string DisplayMember
{ get; set; }
Имя свойства или столбца в источнике данных (связанного
с ComboBox через свойство DataSource) для вывода
элементов в список ComboBox . Умолчание String.Empty.
string ValueMember
{ get; set; }
Имя свойства или столбца в источнике данных, который
используется как значение. Умолчание String.Empty.
DataGridViewComboBoxCell.
ObjectCollection .Items
{ get; }
Значение свойства Items объекта
DataGridViewComboBoxCell (доступно через свойство
CellTemplate). При использовании Items значения
ValueMember и DisplayMember игнорируются.
bool AutoComplete { get; set; }
Автоматическое заполнение списка ComboBox.
 Значения свойств DataSource, ValueMember и AutoComplete получают
одноименные свойства объекта CellTemplate и все ячейки в столбце.
 При изменении значений этих свойств перерисовывается весь столбец.
 Чтобы изменить значения свойств только для одной ячейки, надо присвоить
им значения после того, как они установлены для всего столбца.
Тип столбца DataGridViewButtonColumn
 Ячейки столбца содержат кнопки.
 Нельзя создать автоматически при подсоединении источника
данных. Необходимо создать явно и добавить к коллекции столбцов
DataGridView, которая доступна через свойство DataGridView.Columns.
 Удобно использовать для того, чтобы выполненить операцию с
одной записью, например, для того, чтобы вывести дочернюю запись
(child record) в отдельном окне.
 Для выполнения операции обрабатывается событие
System.Windows.Forms.DataGridView.CellClick.
События DataGridView
 В классе DataGridView определено около 200 событий ( вместе с
унаследованными от класса Control).
 Классы DataGridViewColumn, DataGridViewRow, DataGridViewCell и
их производные не имеют своих событий кроме Disposed.
Проверка корректности данных в DataGridView
 Cобытие CellValidating позволяет проверить корректность
введенных в ячейку данных перед тем, как они будут приняты
(committed).
 Событие CellValidating происходит, когда изменяется текущая
(current) ячейка.
Событие имеет тип
public delegate void DataGridViewCellValidatingEventHandler
( Object sender, DataGridViewCellValidatingEventArgs
e );
 В классе DataGridViewCellValidatingEventArgs определены свойства,
которые можно использовать при проверке корректности введенных
данных.
Свойства класса DataGridViewCellValidatingEventArgs
bool Cancel { get; set; }
true, если введенное значение не принимается.
Свойство унаследовано от CancelEventArgs.
Текст, введенный пользователем, передается как
значение свойства FormattedValue. Это значение
Object FormattedValue { get; }
затем разбирается (parsed) и передается как
значение свойства Value для ячейки.
int ColumnIndex { get; }
Номер столбца, в котором находится ячейка.
int RowIndex { get; }
Номер строки, в которой находится ячейка.
Событие DataError
 Событие DataError происходит, если при обновлении источника
данных или при обработке событий Format или Parse возникает
ошибка в данных, подсоединенных к элементу управления.
 Делегат события имеет тип
public delegate void DataGridViewDataErrorEventHandler( Object sender,
DataGridViewDataErrorEventArgs e );
 Тип второго параметра делегата
public class DataGridViewDataErrorEventArgs :
DataGridViewCellCancelEventArgs
 Через свойства класса DataGridViewDataErrorEventArgs можно
получить дополнительную информацию о состоянии элемента
управления DataGridView при возникновении ошибки в данных.
Свойства класса DataGridViewDataErrorEventArgs
bool Cancel { get; set; }
При значении true, ячейка не отдает фокус ввода до тех
пор, пока не будет введено корректное значение. Для
false при некорректном вводе восстанавливается старое
значение. Свойство унаследовано от CancelEventArgs.
int ColumnIndex { get; }
Номер столбца для ячейки DataGridViewCell, которая
является источником события. Унаследовано от
DataGridViewCellCancelEventArgs.
int RowIndex { get; }
Номер строки для ячейки DataGridViewCell, которая
является источником события. Унаследовано от
DataGridViewCellCancelEventArgs.
Exception Exception { get; }
Исключение, представляющее ошибку в данных.
bool ThrowException { get; set; }
true, если исключение необходимо передать другому
обработчику DataGridViewDataErrorEventHandler при
выходе из делегата. Умолчание false.
DataGridViewDataErrorContexts
Context { get; }
Побитовая комбинация значений перечисления
DataGridViewDataErrorContexts, уточняющая
причину(контекст) ошибки.
Перечисление DataGridViewDataErrorContexts
 Перечисление содержит информацию о состоянии DataGridView при
возникновении ошибки в данных. Перечисление имеет атрибут
FlagsAttribute, допускающий побитовую комбинацию значений
перечисления.
Значение
Когда произошла ошибка
Formatting
Форматирование данных при обмене данными между источником и элементом
управления (в любом направлении).
Display
Вывод(displaying ) данных, полученных из источника.
PreferredSize
Вычисление предпочтительного (preferred ) размера ячейки при программном
изменении размера столбца или строки.
RowDeletion
Удаление строки в источнике, присоединенном к DataGridView .
Parsing
Commit
Разбор (parsing ) данных (при загрузке из источника или при вводе
пользователем).
Фиксация (committing) изменений при передаче данных из элемента
управления в подсоединенный источник.
Перечисление DataGridViewDataErrorContexts -2
Значение
InitialValueRestoration
LeaveControl
CurrentCellChange
Scroll
ClipboardContent
Когда произошла ошибка
Восстановление значения, которое имела ячейка до начала
редактирования. Может встретиться, если в процессе
редактирования изменилось форматирование, которое стало
несовместным со старым значением.
Элемент управления потерял фокус ввода и не может фиксировать
(commit ) изменения, внесенные пользователем.
Курсор выделения перешел к другой ячейке , при этом данные в
предыдущей ячейке содержат ошибку.
Скроллинг DataGridView (программный или пользовательский), в
результате которого данные с ошибкой попали в область видимости.
Копирование данных в Clipboard.
Download