Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Настройка Grid / 7 сообщений из 7, страница 1 из 1
21.11.2016, 19:33
    #39351417
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Здравствуйте всем!

Есть форма, на ней создан grid, 19 столбцов. В grid использованы методы для отслеживания изменений:

AfterRowColChange:
Код: sql
1.
2.
3.
4.
5.
LPARAMETERS nColIndex
local loObj

loObj = EVALUATE("This.Columns(nColIndex)."+This.Columns(nColIndex).CurrentControl)
ThisForm.MyVar = loObj.Value



и

BeforeRowColChange :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LPARAMETERS nColIndex
local loObj

loObj=EVALUATE("This.Columns(nColIndex)."+This.Columns(nColIndex).CurrentControl)


IF   loObj.value != ThisForm.MyVar
*есть изменения
	IF this.columns(ncolIndex).Header1.Caption = 'Имя столбца'
		MESSAGEBOX('То-то и то-то изменено, что-то надо делать')
	ENDIF	
ENDIF 



Впоследствии возникла необходимость добавить два столбца, причем один из них имеет имя Column20, а его ордер 14, и Sparse = .f.

Код событий для колонок, стоящих после указанной не отрабатывает. Предполагаю, из-за Sparse = .f., который, в свою очередь необходим для отображения ChekBox в grid.

Лечится ли это как-то?
...
Рейтинг: 0 / 0
21.11.2016, 19:40
    #39351425
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
А может и не из-за Sparse = .f., а может из-за нарушения порядка столбцов.
Так, например, расположенный после проверяемый столбец имеет порядок 15 и имя Column16

А в столбцах, расположенных до "внедренного" - все работает.
...
Рейтинг: 0 / 0
21.11.2016, 21:51
    #39351486
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Справился так - удалил все столбцы до сбивающего порядок, включая его, и снова набрал их же в надлежащем порядке.

Все работает.

Таким образом, указанный в событиях AfterRowColChange и BeforeRowColChange код ломается при любом несоответствии расположения колонок на gride и их order-а.
...
Рейтинг: 0 / 0
22.11.2016, 07:11
    #39351559
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Ты прописал CurrentControl = 'CheckBox1' ? Иначе CurrentControl остался TextBox
...
Рейтинг: 0 / 0
22.11.2016, 17:31
    #39352088
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Dima T,

Добрый день, Dima T.

Да, вроде все правильно сделал.
DynamicCurrentControl = iif(table.ldoc = .t., "ChkShip", "Text1") && Показывает ChekBox в зависимости от значения другого поля

В Init grid-а :

this.column14.text1.Enabled= .F.
this.column14.text1.Visible = .f.

Т.е. скрыл text1 вообще, но не удалял, что бы выполнялось значение DynamicCurrentControl

В общем-то, все работает, только вручную пришлось переделать пол грида. Как только очередность столбцов ColumnOrder совпала с именем Column# и что самое, почему-то важное, с очередностью отображения столбцов в выпадающем списке окна Properties объекта grid, т.е. когда все эти очередности совпали - все и заработало.

Я так понимаю, индекс nColIndex соотносится как раз с этой последней очередностью, но не с номером колонки Column# .

Вопрос еще был в том, что можно ли было как-то пересобрать grid автоматически, что бы колонки получили номера, соответствующие фактическому, если можно так выразиться - "физическому" расположению на гриде и сам грид внутри себя их воспринимал бы именно в такой последовательности.

Вопрос сейчас имеет чисто академический интерес, поскольку грид-то я переписал, но если что на будущее )
...
Рейтинг: 0 / 0
23.11.2016, 07:19
    #39352366
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Не уверен что CurrentControl и DynamicCurrentControl будут корректно работать в такой связке. Сам так не делал.

Обычно если добавляю чекбокс, то удаляю текстбокс. Для этого выбери в окне Properties удаляемый TextBox1 и нажми Del

DynamicCurrentControl использовал только для показа картинок.

С помощью BINDEVENT() можно программно привязать свой обработчик нужным контролам.
...
Рейтинг: 0 / 0
24.11.2016, 14:10
    #39353657
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Grid
Dima T,

Сорри, был в отъезде.

DynamicCurrentControl так работает. В данном случае идея в том, что бы checkbox показать не в каждой строке, а только в тех, где выполняется условие по значению другого поля, поэтому не удалял text1.

BINDEVENT() - разберем, спасибо за подсказку.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Настройка Grid / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]