Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Установка фокуса на строку в таблице по значению поля подчиненной формы

Все о том как сделать что-то с помощью скриптов.
Аватара пользователя
Иван
Интересующийся
Сообщения: 87
Зарегистрирован: Сб дек 22, 2018 2:16 pm
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Установка фокуса на строку в таблице по значению поля подчиненной формы

Сообщение Иван » Пн июн 24, 2019 8:13 pm

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

Вопрос: как можно установить фокус в таблице подчиненной формы на определенную строку через фильтр значения поля подчиненной формы?

Аватара пользователя
admin
Разработчик
Сообщения: 4626
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 20 раз
Поблагодарили: 95 раз

Установка фокуса на строку в таблице по значению поля подчиненной формы

Сообщение admin » Пн июн 24, 2019 11:41 pm

Иван писал(а):Вопрос: как можно установить фокус в таблице подчиненной формы на определенную строку через фильтр значения поля подчиненной формы?

Вопрос не понял.

Аватара пользователя
Иван
Интересующийся
Сообщения: 87
Зарегистрирован: Сб дек 22, 2018 2:16 pm
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Установка фокуса на строку в таблице по значению поля подчиненной формы

Сообщение Иван » Вт июн 25, 2019 12:13 am

Всегда думаешь думаешь, только написал на форум и придумал. Данный вопрос решил добавив в стандартный обработчик Удалить запись на таблице в PopupMenu нужные свойства сохранив обработчик в новый.
Но все же этот вопрос (выделения по требованию) у меня уже не раз возникал по разным ситуациям. Интересно его решить.

В общем ситуация такая. Например: Есть форма с таблицей. В подчиненной форме есть поле Цвет. Создано три записи в подчиненной таблице (написано по порядку их размещения в таблице): 1-синий, 2 - красный, 3- зеленый.

На главной форме есть выпадающий список Цвет.

Как можно установить фокус на строку 2-красный когда в выпадающем списке на главной форме выбрано значение цвета "красный".

Если, например, нужно со строкой 2-красный проводить действия скриптом (когда выбрано значение списка на главной) используя кнопки таблицы Удалить, Копировать, Изменить (которые выполняют действия со строкой на которой установлен фокус).

Аватара пользователя
Develop-Soft
Сообщения: 1023
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 39 раз
Поблагодарили: 211 раз
Контактная информация:

Установка фокуса на строку в таблице по значению поля подчиненной формы

Сообщение Develop-Soft » Вт июн 25, 2019 9:57 am

Код: Выделить всё

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 раза

Установка фокуса на строку в таблице по значению поля подчиненной формы

Сообщение Иван » Вт июн 25, 2019 10:29 am

Спасибо за помощ, 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;