Каков стандартный способ в Delphi 5 наблюдать за изменением выбора в DBGrid?
У меня есть много форм "мастер / деталь" в моем приложении. TDBGrid, где каждая строка показывает несколько основных значений элемента. Под сеткой обычно находится "Область сведений", которая показывает полную информацию об элементе, который в данный момент выбран в сетке.
В настоящее время я слушаю "AfterScroll"- событие TADOQuery за сеткой, но, похоже, оно дает мне слишком много событий.
Является ли AfterScroll правильным событием для этого? Как ты это делаешь?
2 ответа
"Стандартный" способ (в среде, учитывающей данные) состоит в том, чтобы не управлять этим с помощью элементов управления GUI, а использовать компоненты данных.
Большинство наборов данных таблицы обеспечивают MasterSource
(связано с соответствующим TDataSource
компонент) и MasterFields
свойства. Вы используете их, чтобы связать ваши наборы данных в отношениях мастер-детали. Тогда ваша детальная сетка (или другие элементы управления с учетом данных ) должны заботиться только о связях с правильным набором данных.
РЕДАКТИРОВАТЬ
Другие виды наборов данных (например, TQuery
, TADOQuery
) иногда предоставляют DataSource
использоваться для аналогичной цели. Из Delphi 5 помогите: Set DataSource to automatically fill parameters in a query with fields values from another dataset.
"
Тем не менее, есть еще несколько осложнений (как будет видно при чтении справки). Так что может быть целесообразно использовать TTable
или же TADOTable
вместо подробного набора данных.
Я не знаю, есть ли какой-нибудь "стандартный" способ, но ИМО AfterScroll
Это хорошо. Используйте таймер, чтобы предотвратить быстрое обновление элементов управления, например, при прокрутке сетки. Пример:
procedure TSomeForm.DataSetAfterScroll(DataSet: TDataSet);
begin
if not DataSet.ControlsDisabled then begin
if ScrollTimer.Enabled then
ScrollTimer.Enabled := False;
ScrollTimer.Enabled := True;
end;
end;
procedure TSomeForm.ScrollTimerTimer(Sender: TObject);
begin
ScrollTimer.Enabled := False;
UpdateGUI;
end;
Я думаю, что вы найдете интервал в 250-300 мс приятным.