Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как узнать номер колонки Grid'а? / 21 сообщений из 21, страница 1 из 1
30.03.2017, 09:53
    #39429745
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Господа! Подскажите, пожалуйста, дилетанту, как узнать номер колонки Grid'а по клику по Header'у колонки. Есть форма, на ней Grid. Количество полей отображаемой таблицы может меняться. В методе Init формы определяется список отображаемых полей. Соответственно, настраивается Grid: прописывается количество колонок, привязываются источники данных и т.д. Для сортировки по полю таблицы нужно выяснить по Header'у какой колонки кликнули. Что-то не смог ни сообразить, ни найти как это сделать. Помогите, пожалуйста.
...
Рейтинг: 0 / 0
30.03.2017, 10:03
    #39429762
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
В хэдере ссылка на его Column это
Код: sql
1.
This.Parent....


этого достаточно, но можно и номер получить
Код: sql
1.
This.Parent.ColumnOrder
...
Рейтинг: 0 / 0
30.03.2017, 10:12
    #39429771
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Если твой код где-то снаружи выполняется, есть еще
Код: sql
1.
ThisForm.Grid.ActiveColumn


Но сначала надо проверять что он есть, а потом использовать
Код: sql
1.
2.
3.
if vartype(ThisForm.Grid.ActiveColumn) = 'O'
    ? ThisForm.Grid.ActiveColumn.ColumnOrder
endif
...
Рейтинг: 0 / 0
30.03.2017, 11:01
    #39429833
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Dima TВ хэдере ссылка на его Column это
Код: sql
1.
This.Parent....


этого достаточно, но можно и номер получить
Код: sql
1.
This.Parent.ColumnOrder



Небольшое дополнение.
ColumnOrder показывает не ссылку, и не номер, а порядок.
Потому, вычислить конкретную колонку по нему, не верно. Юзер может переставить местами колонки, и все полетит.
This.Parent.... самое правильное)
...
Рейтинг: 0 / 0
30.03.2017, 11:05
    #39429842
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteant,
Не прочитал толком вопрос)
Как подсказывал Dima T вам видимо достаточно
Код: sql
1.
 field=this.parent.ControlSource
...
Рейтинг: 0 / 0
30.03.2017, 11:45
    #39429888
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Спасибо за скорые ответы!
Как я понимаю, код

field=this.parent.ControlSource

надо размещать в обработчик события Click Header'а. Но. Форма создана конструктором. Количество полей прописать не могу. Изначально свойство Grid'а ColumnCount установлено в -1. Прописать необходимый код в конструкторе не могу. Количество полей устанавливается в событии Init формы. Вопрос. Как разместить код в обработчик события Click Header'а программно? Пробовал применить

BINDEVENT(thisform.grid1.Columns(i).Header1,'click',thisform,'myindex')

Естественно, не работает. Помогите, где туплю?
...
Рейтинг: 0 / 0
30.03.2017, 12:16
    #39429943
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteantВопрос. Как разместить код в обработчик события Click Header'а программно?
Grid.ActiveColumn не пробовал использовать? 20349668

Заглянул как у меня это порешано, оказалось по другому. Уже не помню почему так, но работает стабильно.

У меня так прописано
MyGrid.Init()
Код: sql
1.
2.
3.
4.
5.
6.
for each loCol in This.Columns
	for i = 1 to loCol.ControlCount
		if loCol.Controls(i).BaseClass = 'Header'
			BINDEVENT(loCol.Controls(i), "RightClick", This, "HeaderRightClick") 
			BINDEVENT(loCol.Controls(i), "Click", This, "HeaderLeftClick")
...



MyGrid.HeaderRightClick()
Код: sql
1.
2.
3.
loHdr = this.GetMouseObject('Header')
if vartype(loHdr) = 'O'
... loHdr - хэдер по которому кликнули



MyGrid.GetMouseObject()
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
lpara tcClass
* получение ссылки на объект под курсором мыши
* tcClass - класс объеста
local loRet
if empty(tcClass)
	tcClass = 'Column'
endif

local array laM[2]
AMOUSEOBJ(laM, 1)
if type('laM[1]') = 'O' 
	if laM[1].BaseClass = tcClass
		loRet = laM[1]
	else
		if type('laM[1].ControlCount') = 'N'
			for i = 1 to laM[1].ControlCount
				if laM[1].Controls(i).BaseClass = tcClass
					loRet = laM[1].Controls(i)
					exit
				endif
			endfor
		endif
	endif
endif

return loRet
...
Рейтинг: 0 / 0
30.03.2017, 12:22
    #39429964
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Спасибо, буду разбираться.
Пытался привязаться к активной колонке. Ситуация с ActiveColumn следующая. Активна первая ячейка первой колонки. Кликаю, к примеру, по Header'у 7-й колонки. Активной остаётся первая ячейка первой колонки, и сортировка, соответственно, выполняется для первой колонки. Если предварительно активировать нужную ячейку и кликнуть по соответствующему ей Header'у, все нормально срабатывает. Но это ж неудобно для пользователя.
...
Рейтинг: 0 / 0
30.03.2017, 12:31
    #39429979
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Смотри мой GetMouseObject(), остальное, как понял, у тебя уже написано.
...
Рейтинг: 0 / 0
30.03.2017, 13:28
    #39430064
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Спасибо, изучил новую функцию.
Теперь осталось выяснить, как к Grid'у метод добавить. Полагаю, создания своего класса для Grid не избежать? В конструкторе можно добавить метод только к форме?
...
Рейтинг: 0 / 0
30.03.2017, 13:47
    #39430094
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteantСпасибо, изучил новую функцию.
Теперь осталось выяснить, как к Grid'у метод добавить. Полагаю, создания своего класса для Grid не избежать? В конструкторе можно добавить метод только к форме?
Не обязательно его к гриду добавлять. Добавь к форме и вызывай ThisForm.GetMouseObject()
Я свой класс-обертку использую, поэтому туда добавил.

Можно вообще в процедуры добавить или сделать GetMouseObject.prg и тогда вызывать
Код: sql
1.
loHdr = GetMouseObject('Header')
...
Рейтинг: 0 / 0
30.03.2017, 13:54
    #39430102
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Спасибо, буду пробовать.
...
Рейтинг: 0 / 0
30.03.2017, 14:25
    #39430147
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
GetMouseObject('Header') возвращает .F.
Думаю, связано с тем, что вызывается не с Grid'а, а с формы. Похожий результат был, когда с подсказки ВладимираМ ставил опыты с sys(1270). Тот же результат -- не видел объекта под указателем мыши. Или я неправильно понимаю суть происходящего или что-то неправильно делаю.
...
Рейтинг: 0 / 0
30.03.2017, 14:39
    #39430161
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteantGetMouseObject('Header') возвращает .F.
Думаю, связано с тем, что вызывается не с Grid'а, а с формы. Похожий результат был, когда с подсказки ВладимираМ ставил опыты с sys(1270). Тот же результат -- не видел объекта под указателем мыши. Или я неправильно понимаю суть происходящего или что-то неправильно делаю.
GetMouseObject() основан на AMOUSEOBJ()
Он никак не привязан к месту вызова.

Смотри что AMOUSEOBJ() возвращает. Может у тебя грид еще в каком-то контейнере, например на PageFrame. Тогда это тоже надо учесть.
...
Рейтинг: 0 / 0
30.03.2017, 14:48
    #39430184
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Можешь простой пример сделать (проект из одной формы с гридом) и сюда выложить, посмотрю.
...
Рейтинг: 0 / 0
30.03.2017, 16:04
    #39430291
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Grid лежит на форме, страниц нет.
AMOUSEOBJ возвращает пустой массив, все элементы .F.
...
Рейтинг: 0 / 0
31.03.2017, 09:03
    #39430634
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Dima TМожешь простой пример сделать (проект из одной формы с гридом) и сюда выложить, посмотрю.
Спасибо, общую идею понял. Буду разбираться.
...
Рейтинг: 0 / 0
31.03.2017, 12:45
    #39430815
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteantGetMouseObject('Header') возвращает .F.
Думаю, связано с тем, что вызывается не с Grid'а, а с формы.
Затестил, все работает. GetMouseObject() добавил как метод формы.
...
Рейтинг: 0 / 0
31.03.2017, 12:48
    #39430822
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
deleteantDima TМожешь простой пример сделать (проект из одной формы с гридом) и сюда выложить, посмотрю.
Спасибо, общую идею понял. Буду разбираться.
Тебе лень пример сделать, я мне, чтобы проверить, пришлось делать это за тебя. Сделал бы пример, я бы тебе его исправленный вернул.
...
Рейтинг: 0 / 0
31.03.2017, 14:10
    #39430904
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Dima TТебе лень пример сделать, я мне, чтобы проверить, пришлось делать это за тебя. Сделал бы пример, я бы тебе его исправленный вернул.

Извиняюсь, что неоправданно напрягаю. Спасибо большое за участие. Тут непоняток и проблем воз и маленькая тележка. Озвученная -- только одна из них. Думаю, где-то кривизна закралась и плодит чудеса. Не хочется грузить практическими проблемами своих проектов. Мне бы теоретическую подсказку. Ее получил и, бонусом, работающий код, как иллюстрацию. За что большое спасибо. Все-таки, поковыряюсь сам.
...
Рейтинг: 0 / 0
03.04.2017, 10:10
    #39431868
deleteant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать номер колонки Grid'а?
Всё норм. Видимо, неправильно тестил. Возвращает ссылку на объект класса Column. Меня это устраивает. Спасибо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как узнать номер колонки Grid'а? / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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