Страница 18

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






Скачать учебник
Предыдущая страница
Следующая страница
производится внутри метода Paint, который переопределяется в наследниках класса DataGridViewCell. Кроме того, DataGridView посылает событие CellPainting, в обработчике которого можно изменить отрисовку ячеек, не изменяя собственного типа ячейки.

Разбор вводимого значения

Важно понимать, что при редактировании ячейки пользователь изменяет не ее значение, а значение ее FormattedValue. При сохранении значения FormattedValue нужно преобразовать обратно в тип, хранимый в ячейке. На уровне ячейки этим управляет метод DataGridViewCell.ParseFormattedValue (int rowIndex).

По умолчанию ParseFormattedValue использует для обратного преобразования TypeConverter-ы. DataGridView при этом генерирует событие CellParsing, давая возможность изменить способ разбора FormattedValue ячейки.

При невозможности корректного разбора FormattedValue генерируется событие DataError.

Шесть типов встроенных колонок

В приведенной в начале статьи схеме иерархии классов показано, что все колонки имеют одного предка – класс DataGridViewColumn. У этого класса есть важное свойство – CellTemplate типа DataGridViewCell. Это свойство (чаще всего его значение задают через перегруженный конструктор DataGridViewColumn(DataGridViewCell cellTemplate)) определяет, ячейки какого типа будут генерироваться при добавлении строк. Но установка этого свойства всего лишь определит, что именно генерировать автоматически при добавлении новой строки, и вовсе не запретит колонке иметь в своем составе ячейки других типов.

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

СОВЕТ

При создании ячейки собственного типа унаследуйте ее класс от DataGridViewCell и присваивайте ему имя вида DataGridView<ваш_тип>Cell. Одновременно с этим не забудьте унаследовать от DataGridViewColumn еще один класс с именем DataGridView<ваш_тип>Column.

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

Давайте сразу же обратимся к коду короткого примера:

using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
 
public class Form1 : Form
{
  public Form1()
  {
    DataGridView _grid = new DataGridView();
    _grid.Dock = DockStyle.Fill;
    _grid.AllowUserToAddRows = false;
    Controls.Add(_grid);
    _grid.Columns.Add(new DataGridViewTextBoxColumn());
    _grid.Columns[0].HeaderText = "TextBoxColumn";
    _grid.Columns.Add
Предыдущая страница
Следующая страница
Хостинг от uCoz