Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-31232
seal
2003-06-28 17:57
2003.07.10
RichEdit


1-31281
picaroon
2003-06-26 13:23
2003.07.10
Как менять цвет Button а?


4-31560
K_O_T
2003-05-06 22:35
2003.07.10
COM интерфейс IStorage. Help!


7-31549
ArtGamer
2003-04-28 21:54
2003.07.10
Получение дополнительных свойств файла в NTFS


1-31197
Navi
2003-06-28 14:29
2003.07.10
Сбросить фокус