Виведення записів набору даних в табличному вигляді використовуючи компонент TDBGrid

Для виведення записів набору даних в табличному вигляді зручно використовувати сітку, представлену delphi-компонентом типу TDBGrid. Зовнішній вигляд сітки відповідає внутрішній структурі таблиці бази даних і набору даних. При цьому, рядкам сітки відповідають записи, а стовпцям — поля.

Об'єкт TDBGrid зв'язується з джерелом даних через свою властивість DataSource, яке, в свою чергу, посилається на набір даних. Тобто, якщо на форму, де вже відповідним чином налаштовані невізуальні компоненти, наприклад, Table1 та DataSource1 помістити таблицю DBGrid1, і у властивості DataSource даної таблиці вказати значення DataSource1, то ми відразу ж побачимо вміст таблиці бази даних, що пов'язується з набором даних Table1. В нашому випадку це таблиця cars («Автомобілі») бази даних dbautobazar («Автобазар»).

tdbgrid_komponent1

Вивід вмісту таблиці cars в компоненті DBGrid1

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

Відмітимо, що за допомогою сітки TDBGrid, користувач може управляти набором даних, поля якого відображаються в ній. Для навігації по записах і їх перегляду використовуються полоса прокрутки і навігаційні клавіші зі стрілками. Для переходу в режим редагування поля достатньо встановити на нього курсор і натиснути будь-яку буквено-цифрову клавішу клавіатури. Перехід в режим вставки нового запису виконується натисканням клавіші Insert, після чого можна заповнювати поля. Вставка запису відбувається в тому місці, де знаходиться покажчик поточного запису. Зміни, зроблені при редагуванні або додаванні запису, підтверджуються натисканням клавіші Enter або переходом до нового запису. Скасування внесених змін здійснюється натисканням клавіші Esc. Для видалення запису слід натиснути комбінацію клавіш Ctrl + Delete.

Основною властивістю сітки TDBGrid є властивість Columns типу TDBGridColumns. Дана властивість представляє собою масив об'єктів Column типу TColumn, що описують окремі стовпці сітки. Властивість SelectedIndex типу Integer задає номер поточного стовпця в масиві Columns, а властивість SelectedField вказує на об'єкт типу TField, якому відповідає поточний стовпець сітки.

Властивість FieldCount типу Integer (доступна під час виконання програми) містить число видимих стовпців сітки, а властивість Fields[Index: Integer] типу TField дозволяє отримати доступ до окремих стовпців. Індекс визначає номер стовпчика в масиві стовпців і приймає значення в інтервалі 0...FieldCount-1.

Властивості Color і FixedColor типу TColor задають кольори сітки і її фіксованих елементів відповідно. За замовчуванням властивість Color приймає значення clWindow (колір фону Windows), а властивість FixedColor — значення clBtnFace (колір кнопки).

Властивість TitleFont типу TFont визначає шрифт, який використовується для виведення заголовків стовпців.

Доступ до параметрів сітки можливий через властивість Options типу TGridOptions. Ця властивість являє собою множину, що приймає комбінації наступних значень:

  1. dgEditing — користувачеві дозволяється редагування даних, що містяться в комірках сітки;
  2. dgAlwaysShowEditor — сітка не блокує режим редагування;
  3. dgTitles — відображаються заголовки стовпців;
  4. dgIndicator — для поточного запису на початку рядка виводиться покажчик;
  5. dgColumnResize — користувач може за допомогою миші змінювати розмір стовпців і переміщати їх;
  6. dgColLins — між стовпцями виводяться розділові вертикальні лінії;
  7. dgRowLines — між рядками виводяться розділові горизонтальні лінії;
  8. dgTabs — для переміщення по сітці можна використовувати клавішу Tab і комбінацію клавіш Shift + Tab;
  9. dgRowSelect — користувач може виділити цілий рядок (при установці цього значення ігноруються значення dgEditing і dgAlwaysShowEditor);
  10. dgAlwaysShowSelection — комірка залишається виділеною, навіть якщо сітка втрачає фокус;
  11. dgConfirmDelete — при видаленні рядка видається запит на підтвердження операції;
  12. dgCancelOnExit — додані до сітки порожні рядки — записи (при втраті сіткою фокуса не зберігаються в наборі даних);
  13. dgMultiSelect — в сітці можна одночасно виділити кілька рядків;

За замовчуванням властивість Options містить комбінацію наступних значень [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit].

При натисканні на комірці з даними генерується подія OnCellClick, а натискання лівої кнопки миші на заголовку стовпця викликає подію OnTitleClick. Обидві ці події мають тип TDBGridClickEvent, який описується наступним чином:

type TDBGridClickEvent = procedure (Column: TColumn) of Object;

Параметр Column являє собою стовпець, на якому було виконана натискання лівої кнопки миші.

При переміщенні фокуса між стовпцями сітки ініціюються події OnColEnter і OnColExit типу TNotifyEvent, перша з яких виникає при отриманні стовпцем фокуса, а друге — при його втраті.

Якщо властивість Options містить значення dgColumnResize, то користувач може за допомогою миші переміщувати стовпчики сітки. При такому переміщенні генерується подія OnColumnMoved типу TMovedEvent, який описується так:

type TMovedEvent = procedure (Sender: TObject; FromIndex, ToIndex: Longint) of Object;

Параметри FromIndex і ToIndex вказують на індекси в масиві стовпців сітки, що відповідають попереднім і новим положенням переміщеного стовпця відповідно.

Сітка TDBGrid здатна автоматично відображати в своїх комірках інформацію, але при необхідності програміст може виконати і власне відображення сітки. Це може знадобитися в разі, коли бажано виділити комірку або стовпець з допомогою кольору або шрифту, а також вивести в комірці, крім текстової і графічну інформацію, наприклад, невеликий малюнок. Для програмної реалізації відображення сітки використовується обробник події OnDrawColumnCell типу TDrawColumnCellEvent, яка виникає при прорисовці будь-якої комірки. Тип події OnDrawColumnCell описується наступним чином:

type TDrawColumnCellEvent = procedure (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDtawState) of Object;

Де параметр Rect містить координати прямокутника що обмежує комірку; параметр DataCol визначає номер стовпчика що прорисовується в масиві стовпців сітки TDBGrid; параметр Column є об'єктом стовпчика, що прорисовується; параметр State задає стан комірки і може приймати одне з наступних значень: gdSelected (комірка є виділеною), gdFocused (комірка має фокус введення), gdFixed (комірка належить фіксованій зоні таблиці).

Порядок виклику події OnDrawColumnCell залежить від значення властивості DefaultDrawing типу Boolean. Якщо властивість приймає значення True, то перед генерацією події OnDrawColumnCell в комірці відображається фон і виводиться відповідна інформація. Потім навколо обраної комірки малюється прямокутник вибору. Якщо ж дана властивість приймає значення False, то відразу викликається подія OnDrawColumnCell, в обробнику якого слід розмістити програмний код, який буде відповідати за прорисовку комірок таблиці TDBGrid.

Скачати delphi-проект Перегляд та редагування полів таблиць бази даних використовуючи компонент TDBGrid.

Матеріал був корисним, поділись в соціальних мережах:

Якщо тобі сподобалась дана тема, залиш свій коментар