Страница 11

Все о DataGridView. Учебник

Главная
Страница 1
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7
Страница 8
Страница 9
Страница 10
Страница 11
Страница 12
Страница 13
Страница 14
Страница 15
Страница 16
Страница 17
Страница 18
Страница 19
Страница 20
Страница 21
Страница 22
Страница 23
Страница 24
Страница 25
Страница 26






Скачать учебник
Предыдущая страница
Следующая страница
останется пустым или будет содержать колонки от старого источника. Но не данные! Зато это дает полный контроль над происходящим. Можно самостоятельно очистить коллекцию от старых элементов и начать наполнять ее новым содержимым, "выкраивая" каждую новую колонку по своему "лекалу". Этот сценарий перекликается со сценарием номер 4, он удобен, если вы любите держать под контролем каждый байт вашего кода.

Резюме: в данном сценарии программист пользуется коллекцией предварительно сгенерированных колонок, внося минимальные изменения.

4. Отсутствие источника данных во время исполнения

В данном случае нет иного выхода, кроме как поработать ручками и составить собственную коллекцию колонок. Первый шаг – определить тип колонок, которые хотелось бы видеть в grid-е. Поскольку колонки всех типов (и встроенные, и пользовательские) добавляются в grid одинаково, в данном разделе будет рассмотрена работа с самым распространенным типом колонки – DataGridViewTextBoxColumn. Работа со всеми прочими типами колонок абсолютно аналогична.

Есть следующие пути программного добавления колонок:

  • Метод Add() коллекции колонок. Этот метод перегружен и позволяет добавлять как готовую колонку (экземпляр класса DataGridViewColumn или его наследника), так и пару «имя – заголовок»:
_grid.Columns.Add("MyColumnName", "MyColumnHeaderText"); 
_grid.Columns.Add(new DataGridViewColumn(...));
  • Просто установить свойство ColumnCount grid-а в какое-либо значение больше нуля:
_grid.DataSource = null; //если до этого была привязка к источнику
_grid.ColumnCount = 5;

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

О последнем способе добавления колонок стоит сказать особо. Во-первых, нельзя манипулировать этим свойством, если DataGridView привязан к данным. Поэтому первым шагом необходимо "отвязать" grid от источника, что и делает первая строчка приведенного примера. Но, во-вторых – если записать в это свойство число, меньшее, чем количество уже существующих колонок, то колонки, ставшие "лишними", будут просто отброшены. Причем сначала отбрасывается крайняя правая колонка (речь об экранном представлении), затем предшествующая ей, и так далее, вплоть до самой левой, которая останется в гордом одиночестве, вздумай вы присвоить ColumnCount число, равное единице. Впрочем, никакой трагедии – всегда можно явно указать, какие колонки нужно удалить. Для этого существуют методы Remove и RemoveAt коллекции колонок. Обратите внимание, что вторая строчка примера говорит лишь, что общее количество колонок должно стать равным пяти, а уж надо для этого колонки срезать или добавить, решается в зависимости от ситуации. Таким образом, "игры" с этим свойством могут рассматриваться как "быстрый, но грязный" метод регулировки числа колонок в grid-е. Да, и еще одно применение данного свойства: установка его в ноль эффективно очищает коллекцию колонок. Для этого же можно использовать метод Clear.

Резюме: в данном сценарии программист полностью отвечает за создание новых колонок и за их внесение в коллекцию. Настройка новых колонок также полностью лежит на нем.

Добавляем строки

После добавления колонок логично будет научиться добавлять строки. Сразу договоримся, что в данном разделе строки будут рассматриваться как полоски (bands), объединяющие ячейки. Нас пока интересует не наполнение строк реальным содержимым, а только их создание как независимых объектов с последующим помещением в коллекцию строк. Как вы, возможно, догадались, раз есть коллекция колонок, должна быть и коллекция строк. Действительно, свойство DataGridView.Rows (типа DataGridViewRowCollection) обеспечивает доступ к такой коллекции. Пользуясь им, можно добавить строки в grid. Но в отличие от целых четырех возможных сценариев добавления колонок, в случае добавления строк сценарий всего один. Дело в том, что добавлять строки во время разработки нельзя в принципе, так как свойство Rows помечено атрибутом Browsable(false) и не отображается в PropertyGrid. Добавить строки в DataGridView можно или программно, воспользовавшись методом Add коллекции строк, или подключив к нему некоторый источник данных.

Метод Add() имеет четыре варианта:

// добавляет одну строку, заполняя ее значениями по умолчанию
int Add(); 
// добавляет одну строку, заполняя ее значениями из массива values
int Add(params object[] values);
// добавляет несколько строк, заполняя их значениями по умолчанию
int Add(int count);
// добавляет заранее созданную строку
int Add(DataGridViewRow dataGridViewRow); 

DataGridView допускает наличие в одной колонке ячеек разных типов! Что же для этого нужно сделать? Как Для этого сначала объект типа DataGridViewRow должен быть создан и заполнен отдельно. И только затем добавлен в grid. При этом количество колонок в строке должно соответствовать числу колонок grid-а.

Ниже приведен пример добавления переключателя в первую колонку третьей строки :

_grid.DataSource = null; 
// создадим 3 колонки типа DataGridViewTextBoxColumn 
_grid.ColumnCount = 3; 
_grid.Rows.Add();
_grid.Rows.Add();
 
DataGridViewRow newRow = new DataGridViewRow();
// Создаем ячейку типа CheckBox
DataGridViewCheckBoxCell checkCell = new DataGridViewCheckBoxCell();
checkCell.Value = true;
// Добавляем в качестве первой ячейки новой строки ячейку типа CheckBox
newRow.Cells.Add(checkCell); 
// Остальные ячейки заполняем ячейками типа TextBox
newRow.Cells.Add(new DataGridViewTextBoxCell()); 
newRow.Cells.Add(new DataGridViewTextBoxCell()); 
// эта строчка будет с переключателем в первой колонке
_grid.Rows.Add(newRow); 
Предыдущая страница
Следующая страница
Хостинг от uCoz