Коллеги, добрый день!
Вопрос:
Когда у нас впервые инициализируется окно, например грид, то в функции мы можем задать некоторые атрибуты, например:
function wnd_ConditionInDocumentGridOnPrepare(Window) {
var wndMainGridWindow = wndMainGrid.Window;
wndMainGridWindow.Attributes('HideButtonsFrame') = false;
wndMainGridWindow.Prepare();
}
Каким образом можно поменять параметр 'HideButtonsFrame' потом, например в обработчике dlDataOnDatasetAfterPositionChange?
Дело в том, что потом при срабатывании grdDataOnDblClick (наследуется от базового окна) проверяется значение атрибута:
function ViewGridAreaData(Window, BaseGridArea, AdditionalAttributes) {
...
if ((BaseGridArea.HideButtonsFrame) && (!BaseGridArea.CanViewData)) {
return;
}
...
И вот как сделать так, чтобы BaseGridArea.HideButtonsFrame можно было изменить уже после того, как был вызван метод wndMainGridWindow.Prepare(); ???
Спасибо!
Нравится
Здравствуйте,
На dlDataOnDatasetAfterPositionChange вы можете воспользоваться объектом Self, в данном случае это и будет Window
Self.Attributes('HideButtonsFrame') = true
Если необходимо получить доступ к Parent окну текущего можно воспользоваться свойством ParentWindow, если окно является частью другого окна ParentContainer,
Self.ParentWindow.ParentContainer.Attributes('…')
Если мы хотим получить компонент окна, можно воспользоваться свойством ComponentsByName
Self.ParentWindow.ComponentsByName('dlData').Dataset
Алексей, добрый день!
Первый способ я пробовал. Нужно именно текущее окно грида.
Так не получается. (Несмотря на то, что screen2 сделан раньше screen1, суть не меняется)
Есть подозрения что то-ли нужно перекрывать событие grdDataOnDblClick(Control) (а не пользоваться событием из базового окна грида)... то ли окно не то... но почему не то - я понять не могу.
Все оказалось немного сложнее.
BaseArea.HideButtonsFrame устанавливается при инициализации окна в функции SetGridAreaButtonsFrameVisibleState(Window, BaseArea)
Ситуация следующая: имееем базовый грид в разделе + кучу деталей.
Одна из деталей - сложное окно, состоящее так же из главного грида + секондари-грид.
Воот. Задача - менять поведение главного грида в сложном окне из детайла + отрисовку кнопок этого сложного окна при изменении позиции записи в главном гриде основногораздела.
Ну например... Есть раздел "Ордера".
В нем главный грид - ордера + деталь ордер итемы
На детали ордер итемы - сложное окно: грид ордер итемы + грид подчиненные ордер итемы.
Отображать сложное окно ордер итемов и реакцию на двойной клик по ордер итему нужно по-разному в зависимости от того, на каком ордере сейчас находится фокус.
Там пожалуй будет более правильно, чем перерисовывать окно при перемещении по ордер итемам.
Как такое сделать? (учитывая то, что деталей много и рефрешить эту сложную форму нужно только если именно она открыта в данный момент...)
"komgbu" написал:Отображать сложное окно ордер итемов и реакцию на двойной клик по ордер итему нужно по-разному в зависимости от того, на каком ордере сейчас находится фокус.
Приведу маленький пример:
Есть раздел Контакты, в нем есть деталь файлы (сложное окно wnd_FilesDetail: грид файлов wnd_FilesDetailGridArea , window контейнер для групп wnd_Groups)
Необходимо, что бы событие двойного клика grdDataOnDblClick грида wnd_FilesDetailGridArea отррабатывало по разному в зависимости от выделенной записи контакта.
function grdDataOnDblClick(Control) { ... var ContactGridAreaWindow = Self.ParentWindow.ParentContainer.ParentWindow.ParentContainer.ParentWindow.ComponentsByName('wndGridData').Window; var SelectedIDs = ContactGridAreaWindow.ComponentsByName('grdData').SelectedIDs; //выделенные записи var Count = SelectedIDs.Count; if (Count != 0) { if (SelectedIDs.Items(0) == '{id записи Контакта}') { // делаем действия какие либо действия с окнами ContactGridAreaWindow.ComponentsByName('btnCopy').IsEnabled = false; } else { RefreshDataset(ContactGridAreaWindow.ComponentsByName('dlData').Dataset); } } ...
Надеюсь данный пример поможет решить вам задачу