Есть форма с несколькими запросами и подчиненной таблицей. При удалении из подчиненной таблицы записи нужно:сохранить форму, обновить все запросы (в принципе один доп клик, но все же), очень хотелось это все объединить в одну процедуру на кнопке.
Вопрос: как можно установить фокус в таблице подчиненной формы на определенную строку через фильтр значения поля подчиненной формы?


См. также: Энциклопедия DX | Форум на develop-soft | Песочница



Установка фокуса на строку в таблице по значению поля подчиненной формы
- admin
- Разработчик
- Сообщения: 4626
- Зарегистрирован: Пн мар 14, 2016 11:32 am
- Откуда: Ленинградская
- Благодарил (а): 20 раз
- Поблагодарили: 95 раз
Установка фокуса на строку в таблице по значению поля подчиненной формы
Иван писал(а):Вопрос: как можно установить фокус в таблице подчиненной формы на определенную строку через фильтр значения поля подчиненной формы?
Вопрос не понял.
- Иван
- Интересующийся
- Сообщения: 87
- Зарегистрирован: Сб дек 22, 2018 2:16 pm
- Благодарил (а): 9 раз
- Поблагодарили: 2 раза
Установка фокуса на строку в таблице по значению поля подчиненной формы
Всегда думаешь думаешь, только написал на форум и придумал. Данный вопрос решил добавив в стандартный обработчик Удалить запись на таблице в PopupMenu нужные свойства сохранив обработчик в новый.
Но все же этот вопрос (выделения по требованию) у меня уже не раз возникал по разным ситуациям. Интересно его решить.
В общем ситуация такая. Например: Есть форма с таблицей. В подчиненной форме есть поле Цвет. Создано три записи в подчиненной таблице (написано по порядку их размещения в таблице): 1-синий, 2 - красный, 3- зеленый.
На главной форме есть выпадающий список Цвет.
Как можно установить фокус на строку 2-красный когда в выпадающем списке на главной форме выбрано значение цвета "красный".
Если, например, нужно со строкой 2-красный проводить действия скриптом (когда выбрано значение списка на главной) используя кнопки таблицы Удалить, Копировать, Изменить (которые выполняют действия со строкой на которой установлен фокус).
Но все же этот вопрос (выделения по требованию) у меня уже не раз возникал по разным ситуациям. Интересно его решить.
В общем ситуация такая. Например: Есть форма с таблицей. В подчиненной форме есть поле Цвет. Создано три записи в подчиненной таблице (написано по порядку их размещения в таблице): 1-синий, 2 - красный, 3- зеленый.
На главной форме есть выпадающий список Цвет.
Как можно установить фокус на строку 2-красный когда в выпадающем списке на главной форме выбрано значение цвета "красный".
Если, например, нужно со строкой 2-красный проводить действия скриптом (когда выбрано значение списка на главной) используя кнопки таблицы Удалить, Копировать, Изменить (которые выполняют действия со строкой на которой установлен фокус).
- Develop-Soft
- Сообщения: 1023
- Зарегистрирован: Вт мар 05, 2019 6:09 pm
- Благодарил (а): 39 раз
- Поблагодарили: 211 раз
- Контактная информация:
Установка фокуса на строку в таблице по значению поля подчиненной формы
Код: Выделить всё
function GotoChildFmRec(ChildFormName,ChFmFieldName,FindValue:string):boolean;
var SL:TStringList;
Fm:TdxForm;
i:integer;
begin
Fm:=Self.Forms[ChildFormName];
SL:=TStringList.Create;
SL.Text:=VarToStr(EvalExpr('merge("'+ChildFormName+'","'+ChFmFieldName+'",newline)',Fm));
i:=SL.IndexOf(FindValue)+1;
if i>0 then
begin
result:=true;
Fm.MoveTo(i);
end else
result:=false;
Sl.Free;
Fm:=nil;
end;
procedure Test(Sender: TObject);
begin
if not GotoChildFmRec('Поступивший товар','Товар','Гречка') then
debug('Значение не найдено')
end;
P.S. Функция установит фокус на первой найденной записи, содержащей искомый текст (т.е. на первой "Красной" строке).
- Иван
- Интересующийся
- Сообщения: 87
- Зарегистрирован: Сб дек 22, 2018 2:16 pm
- Благодарил (а): 9 раз
- Поблагодарили: 2 раза
Установка фокуса на строку в таблице по значению поля подчиненной формы
Спасибо за помощ, Develop-Soft. Не использовал ранее этот метод. Заодно наконец решил по вашей подсказке как обновлять и фильтровать запрос по клику на таблицу, устанавливая переменную из значения поля подчиненной формы)
Код: Выделить всё
procedure PeremGr (Sender:TObject);
var
fm:TdxForm;
Str:string;
Ccc: TNotifyEvent;
begin
fm:=Self.Forms['Рецепт для производства'];
while not fm.eof do
begin
if fm.Ass['Назврец']<>'' then
begin
Str:= fm.Ass['Назврец'];
EvalExpr('setvar("рецепт_перем","'+ Str +'")',self);
dxQueryGrid2.Refresh;
exit;
end;
end;
end;
procedure Form_Create;
begin
Ccc:= dxGrid1.OnClick;
dxGrid1.OnClick:= @PeremGr;
end;