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


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


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


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



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

field=this.parent.ControlSource

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

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

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

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

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

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


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