Коллеги, добрый день!

Вопрос:
Когда у нас впервые инициализируется окно, например грид, то в функции мы можем задать некоторые атрибуты, например:

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(); ???

Спасибо!

Нравится

4 комментария

Здравствуйте,
На 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);
			}
}
...

Надеюсь данный пример поможет решить вам задачу

Показать все комментарии