Навигация по набору данных
Перемещение или навигация по записям набора данных может осуществляться несколькими путями. Например, в компонентах TDBGrid и TDBCtrlGrid, которые отображают сразу несколько записей набора данных, можно использовать клавиши вертикального перемещения курсора или вертикальную полосу прокрутки.
Но что делать, если на форме находятся только компоненты, отображающие одно поле только текущей записи набора данных (TDBEdit, TDBCombоВох и т. д.)? Очевидно, что в этом случае на форме должны быть расположены дополнительные элементы управления, отвечающие за перемещение по записям.
Аналогично, ни один компонент отображения данных не имеет встроенных средств для создания и удаления записей целиком.
Для решения указанных задач и предназначен компонент TDBNavigator, который представляет собой совокупность управляющих кнопок, выполняет операции навигации по набору данных и модификации записей целиком.
Компонент TDBNavigator при помощи свойства DataSource связывается с компонентом TDataSource и через него с набором данных. Такая схема позволяет обеспечить изменение текущих значений полей сразу во всех связанных с TDataSource компонентах отображения данных. Таким образом, TDBNavigator только дает команду на выполнение перемещения по набору данных или другой управляющей операции, а всю реальную работу выполняют компонент набора данных и компонент TDataSource. Компонентам отображения данных остается только принять новые данные от своих полей.
Рис. 15.4. Назначение кнопок компонента TDBNavigator
Компонент TDBNavigator содержит набор кнопок, каждая из которых отвечает за выполнение одной операции над набором данных. Всего имеется 10 кнопок, разработчик может оставить в наборе любое количество кнопок в любом сочетании. Видимостью кнопок управляет свойство visibleButtons:
type
TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nblnsert, nbDelete,
nbEdit, nbPost, nbCancel, nbRefresh);
TButtonSet = set of TNavigateBtn;
property VisibieButtons: TButtonSet;
Каждый элемент типа TNavigateBtn представляет одну кнопку, их назначение описывается ниже:
nbFirst — перемещение на первую запись набора данных;
nbPrior — перемещение на предыдущую запись набора данных;
nbNext — перемещение на следующую запись набора данных;
nbLast — перемещение на последнюю запись набора данных;
nblnsert — вставка новой записи в текущей позиции набора данных;
nbDelete — удаление текущей записи, курсор перемешается на следующую запись;
nbEdit — набор данных переводится в режим редактирования;
nbPost — в базу данных переносятся все изменения в текущей записи;
nbcancel — все изменения в текущей записи отменяются;
nbRefresh — восстанавливаются первоначальные значения текущей записи, сделанные после последнего переноса изменений в базу данных.
Самой критичной к возможной потере данных вследствие ошибки является операция удаления записи, поэтому при помощи свойства confirmDelete можно включить механизм контроля удаления. При каждом удалении записи нужно будет дать подтверждение выполняемой операции.
Нажатие любой кнопки можно эмулировать программно при помощи метода BtnClick.
В случае необходимости выполнения дополнительных действий при щелчке на любой кнопке можно воспользоваться обработчиками событий BeforeAction и Onciick, в которых параметр Button определяет нажатую кнопку. Свойства и методы компонента TDBNavigator представлены в табл. 15.6.
Таблица 15.6. Свойства и методы компонента TDBNavigator
Объявление |
Тип |
Описание |
Свойства |
||
property ConfirmDelete: Boolean; |
Pb |
Включает или отключает подтверждение удаления записи |
property Hints: TStrings; |
Pb |
Содержит список подсказок для каждой кнопки |
property Flat: Boolean; |
Pb |
Определяет внешний вид кнопок компонента |
type TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nblnsert, nbDeiete, nbEdit, nbPost, nbCancel, nbRefresh); TButtonSet = set of TNavigateBtn ; property VisibleButtons: TButtonSet; |
Pb |
Список видимых кнопок |
Методы |
procedure BtnClick (Index: TNavigateBtn) ; |
Pu |
Эмулирует щелчок на кнопке index |
procedure SetBounds (ALeft, ATop, AWidth, AHeight: Integer) ; |
Pu |
Задает положение (параметры ALeft, АТор) и размер компонента (параметры AWidth, AHeight) |
Методы-обработчики событий |
||
ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object; Iproperty BeforeAction: ENavClick; |
Pb |
Выполняется при щелчке на кнопке Button перед выполнением операции, связанной с кнопкой |
ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object; property OnClick: ENavClick; |
Pb |
Выполняется при щелчке на кнопке Button после выполнения операции, связанной с кнопкой |