Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

  • Главная
  • DataBase
  • BDE
  • DBGrid - представление записей в табличном виде с помощью сетки

DBGrid - представление записей в табличном виде с помощью сетки

CuBook2.55

Для вывода записей набора данных в табличном виде удобно использовать сетку, представленную компонентом DBGrid. Внешний вид сетки соответствует внутренней структуре таблицы БД и набора данных, при этом строке сетки соответствует запись, а столбцу поле. С помощью сетки пользователь управляет набором данных, поля которого в ней отображаются. Для навигации по записям и их просмотра используются полосы прокрутки и клавиши перемещения курсора. Для перехода в режим редактирования поля достаточно установить на него курсор и нажать любую алфавитно-цифровую клавишу. Переход в режим вставки новой записи выполняется нажатием клавиши <Insert>, после чего можно заполнять поля. Вставка записи происходит в том месте, где находится указатель текущей записи. Изменения, сделанные при редактировании или добавлении записи, подтверждаются нажатием клавиши <Enter>, или переходом к другой записи, или отменяются нажатием клавиши <Esc>. Для удаления записи следует нажать комбинацию клавиш <Ctrl>+<Delete>.
 
Характеристики сетки
Сетка DBGrid отображает все записи, имеющиеся в наборе данных, т.е. числом строк в ней управлять нельзя.
 
Основным свойством сетки DBGrid является свойство Columns типа TDBGridColumns, которое представляет собой массив (коллекцию) объектов Column типа TColumn, описывающих отдельные столбцы сетки.
Свойство SelectedIndex типа int задает номер текущего столбца в массиве columns, а свойство SelectedField указывает на объект типа TField, которому соответствует текущий столбец сетки.
Свойство Fieldcount типа int, доступное во время выполнения программы, содержит число видимых столбцов сетки, а свойство Fields [int FieldIndex] типа TField позволяет получить доступ к отдельным столбцам. Индекс определяет номер столбца в массиве столбцов и принимает значения в интервале 0..Fieidcount - 1.
Свойства Color и FixedColor типа TColor задают цвет сетки и ее фиксированных элементов соответственно. По умолчанию свойство color имеет значение clWindow (цвет фона Windows), а свойство FixedColor - значение clBtnFace (цвет кнопки).
Свойство TitleFont типа TFont определяет шрифт, используемый для вывода заголовков столбцов.
Доступ к параметрам сетки (например, для настройки) возможен через свойство Options типа TGridOptions. Это свойство представляет собой множество и принимает комбинации следующих значений:
  • dgEditing (пользователь может редактировать данные в ячейках)
  • dgAlwaysShowEditor (сетка постоянно находится в режиме редактирования)
  • dgTities (отображаются заголовки столбцов)
  • dgIndicator (для текущей записи в начале строки выводится указатель)
  • dgColumnResize (пользователь может с помощью мыши изменять размер столбцов и перемещать их)
  • dgColLines (между столбцами выводятся разделительные вертикальные линии)
  • dgRowLines (между строками выводятся разделительные горизонтальные линии)
  • dgTabs (для перемещения по сетке можно использовать клавиши <Таb> и <Shift>+<Tab>)
  • dgRowSelect (пользователь может выделить целую строку); при установке этого значения игнорируются значения dgEditing и dgAlwaysShowEditor
  • dgAlwaysShowSelection (ячейка остается выделенной, даже если сетка теряет фокус)
  • dgConfirmDelete (при удалении строки выдается запрос на подтверждение операции)
  • dgCancelOnExit (добавленные к сетке пустые строки (записи) при потере сеткой фокуса не сохраняются в наборе данных)
  • dgMultiSelect (в сетке можно одновременно выделить несколько строк)
По умолчанию свойство Options содержит комбинацию значений [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit].
 
При щелчке на ячейке с данными генерируется событие OnCellClick, а щелчок на заголовке столбца вызывает событие OnTitleClick. Оба события имеют тип TDBGridClickEvent, описываемый так:
typedef void __fastcall (__closure *TDBGridClickEvent)(TColumn* Column);
Параметр column представляет собой столбец, на котором был произведен щелчок. При перемещении фокуса между столбцами сетки инициируются события OnColEnter и OnColExit типа TNotifyEvent, первое из которых возникает при получении столбцом фокуса, а второе при его потере.
 
Если свойство Options содержит значение dgColumnResize, то пользователь может с помощью мыши перемещать столбцы сетки. При таком перемещении генерируется событие OnColumnMoved типа TMovedEvent, описываемого как:
typedef void __fastcall (__closure *TMovedEvent)(System::TObject* Sender, int FromIndex, int ToIndex);
Параметры FromIndex и ToIndex указывают индексы в массиве столбцов сетки, соответствующие предыдущему и новому положению перемещенного столбца соответственно.
 
Сетка DBGrid способна автоматически отображать в своих ячейках информацию, но при необходимости программист может выполнить и собственное отображение сетки. Это может понадобиться в случае, когда желательно выделить ячейку или столбец с помощью цвета или шрифта, а также вывести в ячейке, кроме текстовой, графическую информацию, например, рисунок. Для программной реализации отображения сетки используется обработчик события OnDrawColumnCell типа TDrawColumnCellEvent, которое возникает при прорисовке любой ячейки. Тип события OnDrawColumnCell описан так:
typedef void __fastcall (__closure *TDrawColumnCellEvent) (System::TObject* Sender, const Types::TRect &Rect, int DataCol, TColumn* Column, Grids::TGridDrawState State);
Здесь параметр Rect содержит координаты ограничивающего ячейку прямоугольника, параметр DataCol определяет номер прорисовываемого столбца в массиве столбцов сетки, а параметр column является объектом прорисовываемого столбца. Параметр state задает состояние ячейки и принимает комбинации следующих значений:
  • gdSelected (ячейка находится в выбранном диапазоне)
  • gdFocused (ячейка имеет фокус ввода)
  • gdFixed (ячейка находится в фиксированном диапазоне)
Порядок вызова события onDrawColumnCell зависит от значения свойства DefaultDrawing типа bool. Если свойство имеет значение true (по умолчанию), то перед генерацией события onDrawColumnCell в ячейке отображается фон и выводится информация. Затем вокруг выбранной ячейки рисуется прямоугольник выбора. Если свойство DefaultDrawing имеет значение false, то сразу вызывается событие onDrawColumnCell, в обработчике которого следует разместить операции по прорисовке области сетки.
Пример программной прорисовки сетки:
// Свойство DefaultDrawing должно иметь значение true
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State)
{
s = Table1->FieldByName(Column->FieldName)->AsString;
if (Column->FieldName == "Area") {
DBGrid1->Canvas->Brush->Color = clYellow;
DBGrid1->Canvas->Font->Color = clRed;
DBGrid1->Canvas->Font->Style = TFontStyles() << fsBold << fsItalic;
DBGrid1->Canvas->FillRect(Rect);
DBGrid1->Canvas->TextOut(Rect.Left+2, Rect.Top , s);
}
}
Здесь для столбца сетки, который соответствует полю Area (Площадь) набора данных, устанавливается желтый цвет фона, а данные с помощью строковой переменной s выводятся красным цветом и полужирным курсивом. При прорисовке ячеек используется свойство Canvas элемента DBGrid1, а также параметр Rect.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий