Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизValueListEditor + Toolbar Найти похожие ветки
← →
anatolyk (2003-06-28 23:24) [0]Привет всем! Помогите с такой проблемой:
На форме есть:
1. AdoQuery1, AdoQuery2 c Datasourc-ами;
2. ValueListEditor, Key=Имя поля , Value=Значение поля (из ADOQuery1);
3. DBGrid для AdoQuery2;
4. На главной форме - Toolbar с кнопками для управления Dataset (стандартные Actions из ActionList);
Вопрос : как заставить реагировать Toolbar на AdoQuery1, запись которого редактируется в ValueLisEditor-e?
← →
Тих (2003-06-28 23:36) [1]В шмышле? Подцепиться к событиям AdoQuery на изменение поля?
OnWillChangeField.
← →
anatolyk (2003-06-28 23:47) [2]Да.
OnWillChangeField - что там надо вставить (в кратце)? По хэлпу я чего-то не понял. 8(
← →
Тих (2003-06-28 23:59) [3]Occurs before a field is changed. =)
Т.е. возбуждается перед тем, как будет изменено значение поля. Переменной EventStatus: TEventStatus можно рулить этим процессом, например, проверить введенные данные, и, если они некорректные, выказать сообщение об ошибке, сделать недоступной кнопку в тулбаре :) и установить ее в esCancel - и тогда значение в рекордсете изменено не будет. Вроде так.
Я 6 и 7 версию еще в глаза не видел, потому не знаю, что такое стандартные Actions...
← →
anatolyk (2003-06-29 00:11) [4]Смысел понял (примерно). Но с ValueList-ом я работаю так:
сначала типа считываю названия полей и их значения и заношу в список:
While ValueListEditor1.RowCount > 0 do ValueListEditor1.DeleteRow(1);
for i:=0 to AdoQuery1.Fields.Count - 1 do begin
with AdoQuery1 do begin
if Fields[i].Value <> null then
ValueListEditor1.InsertRow(Fields[i].DisplayName,Fields[i].Value,True)
else
ValueListEditor1.InsertRow(Fields[i].DisplayName,"",True);
end
end;
потом заношу значения обратно в поля:
procedure TForm2.ADOQuery1BeforePost(DataSet: TDataSet);
var
i,r: integer;
f: boolean;
begin
AdoQuery1.Edit;
for i:=0 to AdoQuery1.Fields.Count - 1 do begin
with AdoQuery1 do begin
f:=ValueListEditor1.FindRow(Fields[i].DisplayName,r);
try
if ValueListEditor1.Values[Fields[i].DisplayName] = "" then
Fields[i].Value := null
else
Fields[i].Value := ValueListEditor1.Values[Fields[i].DisplayName];
except
end;
end
end;
end;
Ответ: Стандартные Actions - от DatasetFirst,Prior до DatasetPost,Cancel (как в нафигаторе) и далее, в том числе кое-что для ChildDataset.
← →
Тих (2003-06-29 00:27) [5]Если надо енаблить/дизаблить кнопки навигации,
то - проверяйте состояние датасета в обработчике AfterScroll
tbPrior.Enabled := not AdoQuery.BOF;
tbLast.Enabled := not AdoQuery.EOF и т.п.
← →
anatolyk (2003-06-29 00:52) [6]Кстати, если на форму бросить Нафигатор, то все работает.
← →
anatolyk (2003-06-29 00:56) [7]tbPrior.Enabled := not AdoQuery.BOF;
tbLast.Enabled := not AdoQuery.EOF работает, но Action не отрабатывает: кнопку давишь - 0 эмоций.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c