BUG: SetSelectedRow работает некорректно при использовании пользовательских фильтров или сортировки

Страницы: 1
RSS
BUG: SetSelectedRow работает некорректно при использовании пользовательских фильтров или сортировки
 
Добрый день.
Скрытый текст


Применить к таблице фильтр, как на скриншоте: "Row больше 1"
При нажатии на любую клавишу, нужно выделить строку с фактическим порядковым номером 2.
Но выделяется строка с номером 3, о чём сообщает событие QTABLE_SELCHANGED.

1. Как выделять строки по фактическому порядковому номеру, с учётом того, что скрипт понятия не имеет о применённых фильтрах и сортировках?
2. Да в руководстве указано: "Функция работает с видимым представлением таблицы, в котором учитываются пользовательские фильтры и сортировка." Но нафига оно онужно? Можете привести хоть один реальный пример, когда нужно выделить строку в таблице, в которой "учитываются пользовательские фильтры и сортировка", принимая во внимание, что скрипт понятия не имеет о применённых фильтрах и сортировках?
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Добрый день,

касательно некорректности функции SetSelectedRow. Дело в том, что после применения фильтров или сортировки к столбцам изменяются порядковые номера строк в таблице. Вы можете видеть изменённые номера в первом столбце Вашей таблицы. В качестве номеров строк в функции SetSelectedRow() как раз эти номера и используются. Поэтому, если даже судить по Вашему скриншоту, выделяя 2 строку, выделяется строка, где в столбце Row указано значение "3", потому что по порядковому номеру данная строка идёт второй.

Касательно ответа на 1 вопрос. На данный момент такой возможности нет, можем зарегистрировать пожелание на добавление признака, показывающего, что строка отфильтрована в таблице созданной через CreateWindow(), Регистрируем?

Касательно ответа на 2 вопрос. Привести пример, где в Lua-таблице с пользовательскими фильтрами выделяется строка функцией SetSelectedRow(), довольно сложно. Поэтому, как уже говорилось в ответе на первый вопрос, можем зарегистрировать пожелание на добавление признака, который будет показывать, что строка       отфильтрована.
 
Цитата
Daniil Pozdnyakov написал:
Касательно ответа на 2 вопрос. Привести пример, где в Lua-таблице с пользовательскими фильтрами выделяется строка функцией SetSelectedRow(), довольно сложно.
Это был скорее риторический вопрос. Потому что после применения фильтров и/или сортировки к таблице SetSelectedRow() становится бесполезной.

Цитата
Daniil Pozdnyakov написал:
можем зарегистрировать пожелание на добавление признака, показывающего, что строка отфильтрована в таблице созданной через CreateWindow()
Мне нужно выделять строки по их номинальному порядковому номеру. Что я буду делать с этим признаком?
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Цитата
Старатель написал:
Цитата
Daniil Pozdnyakov написал:
Касательно ответа на 2 вопрос. Привести пример, где в Lua-таблице с пользовательскими фильтрами выделяется строка функцией SetSelectedRow(), довольно сложно.
Это был скорее риторический вопрос. Потому что после применения фильтров и/или сортировки к таблице SetSelectedRow() становится бесполезной.

Цитата
Daniil Pozdnyakov написал:
можем зарегистрировать пожелание на добавление признака, показывающего, что строка отфильтрована в таблице созданной через CreateWindow()
Мне нужно выделять строки по их номинальному порядковому номеру. Что я буду делать с этим признаком?
Сделайте в таблице собственное скрытое (шириной 0) поле и записывайте в него ключ - ваш исходный номер строки. Выделяйте строки после поиска по этому ключу
 
Цитата
s_mike@rambler.ru написал:
Выделяйте строки после поиска по этому ключу
И что вы найдёте? Номинальный номер строки? Я её и так знаю. А толку?
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Цитата
Старатель написал:
Цитата
s_mike@rambler.ru написал:
Выделяйте строки после поиска по этому ключу
И что вы найдёте? Номинальный номер строки? Я её и так знаю. А толку?
вы идете по строкам сверху вниз и ищете в каждой строке в скрытом столбце нужный вам ключ. как нашли - выделяйте эту строку по номеру строки перебора, не по ключу.
 
Заодно и будет признак "строка отфильтрована", когда ваш ключ не совпадает с номером строки перебора. Не надо ждать столетия, пока рассмотрят и реализуют.
 
Цитата
s_mike@rambler.ru написал:
вы идете по строкам сверху вниз и ищете в каждой строке в скрытом столбце нужный вам ключ. как нашли - выделяйте эту строку по номеру строки перебора, не по ключу.
GetCell, если вы её имели ввиду, работает с ячейками по номинальному номеру строки (и это правильно, тут к ней претензий нет. Одна только SetSelectedRow оказалась с дефектом в этом плане).
В вашем случае номер строки перебора всегда будет равен ключу.
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Старатель, Добрый день,
Цитата
Старатель написал:
Цитата
Daniil Pozdnyakov написал:
Касательно ответа на 2 вопрос. Привести пример, где в Lua-таблице с пользовательскими фильтрами выделяется строка функцией SetSelectedRow(), довольно сложно.
Это был скорее риторический вопрос. Потому что после применения фильтров и/или сортировки к таблице SetSelectedRow() становится бесполезной.

Цитата
Daniil Pozdnyakov написал:
можем зарегистрировать пожелание на добавление признака, показывающего, что строка отфильтрована в таблице созданной через CreateWindow()
Мне нужно выделять строки по их номинальному порядковому номеру. Что я буду делать с этим признаком?
Могли бы Вы описать, как по-вашему должна быть реализована работа функций с номинальными порядковыми номерами ? Как Вы видите реализацию данного функционала ?
 
Цитата
Daniil Pozdnyakov написал:
описать, как по-вашему должна быть реализована работа функций с номинальными порядковыми номерами

NUMBER row SetSelectedRow(NUMBER table_id, NUMBER row)

row >= 1 and row <= количества строк в таблице  -- выделяет строку с номером row (здесь и далее под номером строки подразумевается номинальный порядковый номер)
                                                                               если строка с номером row отсортирована и не отображается в таблице, то выделение снимается, SetSelectedRow возвращает -1
row = 0  -- снимает выделение, SetSelectedRow возвращает 0
row = -1  -- выделяется последняя видимая строка в таблице (обратите внимание, что сейчас это не работает должным образом, если к таблице применены фильтры)

Если кто-то считает, что SetSelectedRow должен по-прежнему работать с  видимым представлением таблицы, в котором учитываются пользовательские фильтры и сортировка, пусть напишет в этой теме, как это можно использовать.
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Старатель, Я этот вопрос решил раз и навсегда введением невидимого столбца (и даже писал здесь пару раз, как именно). Фрагмент из описания моего скрипта:
Нулевой (невидимый) столбец хранит идентификаторы тикеров в основной Lua-таблице, что позволяет получить доступ к данным выбранного тикера при любом порядке следования строк в таблице QUIK. Обратный доступ также возможен: скрипт "знает", присутствует ли данный тикер в таблице QUIK и, если да, какой идентификатор его строки.
Страницы: 1
Читают тему (гостей: 1)
Наверх