Главная страница
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.021 c
3-31163
Step[B.M.]
2003-06-19 09:04
2003.07.10
Снова об ADO и Excel


3-31136
ZDN
2003-06-18 09:23
2003.07.10
MSSQL, Oracle & DB2


14-31416
CrazyHackers
2003-06-25 19:03
2003.07.10
Ускорить DbGrid


14-31482
Mike B.
2003-06-24 14:46
2003.07.10
Суровые армейские будни


3-31150
nazarona
2003-06-18 18:16
2003.07.10
Штрих-коды в БД