Страница 10

Все о 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






Скачать учебник
Предыдущая страница
Следующая страница

Меню позволяет делать с grid-ом много интересных вещей, но в рассматриваемом сценарии наиболее интересен пункт 'Edit Columns…'. При выборе этого пункта открывается диалог редактирования колонок (рисунок 7).



Рисунок 7.

В нем можно удалить лишние колонки (кнопка Remove), изменить заголовок колонки (свойство HeaderText), тип колонки (свойство ColumnType) и ряд других свойств каждой колонки. В списке Selected Columns слева показываются все колонки, причем их порядок "сверху-вниз" соответствует порядку "слева-направо" реального grid-а. Парой кнопок со стрелками можно менять их порядок в этом списке, автоматически меняя его же в реальном control-е. На рисунке 8 показан список иконок и соответствующих им типов колонок.



Рисунок 8.

Как видно из двух предыдущих иллюстраций, все поля таблицы будут отображаться колонками одного и того же типа – DataGridViewTextBoxColumn, за исключением колонки Discontinued, которые будет иметь тип DataGridViewCheckBoxColumn. Если предположить, что пользователю будут более понятны слова True/False, а не какие-то там коробочки с галочками – нет вопросов. Меняем у данной колонки 'ColumnType' на все тот же DataGridViewTextBoxColumn и получаем требуемое.

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

2. Отсутствие источника данных в дизайн-тайм

В этом сценарии мы не устанавливаем значения свойств DataSource и DataMember, а готовимся работать в свободном, непривязанном режиме. Открываем все то же smart tag-меню, но выбираем 'Add Columns…' (рисунок 9).



Рисунок 9.

Поскольку источника данных нет (DataSource и DataMember выставлены в null), переключатель 'Databound column' не работает. Итак, нам доступен только переключатель 'Unbound column' и подчиненные ему поля. Задавая значения в этом окне, мы, фактически, задаем следующие свойства новой колонки:

  • Имя колонки (не путайте с заголовком) – это имя создаваемой в форме переменной (тип которой DataGridViewColumn или его наследник), в которую помещается ссылка на добавляемую колонку.
  • Тип колонки.
  • И, наконец, просто текст, который будет показан в заголовке данной колонки.

Оставшиеся три переключателя помогают "на лету" задать соответствующие свойства колонки.

Характерно, что после нажатия на кнопку 'Add' данный диалог не закрывается, а предлагает новые значения по умолчанию – Column2, Column3 и т.д., позволяя очень быстро добавить изрядное их количество. Как уже было сказано, работа с разобранными в этом подразделе несвязанными колонками (т.е. наполнение их реальными данными) рассматривается в другом разделе. Пока мы просто учимся работать с колонками, безотносительно к данным.

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

3. Готовый источник данных, подключаемый во время исполнения

Сценарий, соперничающий по простоте со сценарием номер 1. Если свойство DataGridView.AutoGenerateColumns выставлено в true (а по умолчанию так и есть), то во время исполнения любое изменение свойств DataSource/DataMember вызывает генерацию колонок по алгоритму сценария 1. Можно также запустить (перезапустить) этот процесс генерации и добавления, установив упомянутое свойство в false, а потом вернув его в true.

Что произойдет, если сначала подключить grid к одному источнику, имеющему колонки Column1, Column2 и Column3, а после – к другому, имеющему колонки Column4, Column5 и Column6? Получим ли мы после такой операции grid с шестью колонками? Или только с тремя последними? Вообще было бы логично предположить, что перед очередной автогенерацией неплохо очистить существующую коллекцию колонок и начать все с "чистого листа". По счастью, авторы control-а, видимо, рассуждали именно так, поэтому верным будет второй ответ – результатом второй привязки будет grid с тремя колонками Column4, Column5 и Column6. Разумеется, зная этот алгоритм, можно после его окончания немного "поправить" результат работы генератора. Все колонки (в т.ч. сгенерированные) хранятся в коллекции DataGridViewColumnCollection, а доступ к ней производится через свойство Columns. Поэтому если есть опасения, что во время исполнения автогенератор задаст второй колонке слишком малую ширину и не очень правильный заголовок, можно поступить следующим образом:

_grid.AutoGenerateColumns = true; 
// источник должен содержать не менее 2-х колонок, 
// иначе следующая строка выдаст исключение
_grid.DataSource = _biSour; 
_grid.Columns[1].Width = 188;
_grid.Columns[1].HeaderText = "MyHeader";

А что же произойдет при привязке к источнику с AutoGenerateColumns, выставленным в false? Да в общем-то, ничего интересного. Grid

Предыдущая страница
Следующая страница
Хостинг от uCoz