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 и, если да, какой идентификатор его строки.
 
Daniil Pozdnyakov, нужна ещё какая-то информация?
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, Какая ещё "информация"? Вам и я, и s_mike буквально на пальцах разжевали, что нужно делать. Если Вы даже поле этого не способны выделить нужную Вам строку, то какой Вы, в жопу, программист, не говоря уже про "роботорговец"? Перечитайте Ваш же лозунг: "Надо делать так, как надо. А как не надо - делать не надо". Так вот: реализовывать Ваши дурацкие пожелания НЕ НАДО!
 
Владимир, я давно понял, что вы ни черта не понимаете в тех темах, куда суёте свой длинный нос. А объяснять что либо старому дураку бесполезно.
Но я готов заключить с вами сделку:
В первом сообщении данной темы есть скрипт. Если вы его отредактируете таким образом, чтобы в не зависимости от применённых к таблице фильтров или сортировки, при нажатии на любую клавишу выделялась строка с фактическим порядковым номером 2 (если строка она не скрыта фильтром), то я публично признаю, что вы - лучший, чем я программист. Если же вы этого сделать не сможете, то вы перестанете засирать этот форум и навсегда его покинете.
Но я абсолютно уверен, что вы
Цитата
Владимир написал:
не способны выделить нужную строку
, а потому сольётесь под любым предлогом.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, Лапуль, я даже смотреть не собираюсь код вечно скулящего, да ещё и распальцованного неуча - достаточно прочесть заголовок темы: неуч не способен выделить нужную ему строку таблицы. Мой скрипт (и я минимум дважды описывал здесь эту технологию) массово выделяет строки уже в полусекундном прерывании, а в полуторасекундном заполняет их значениями и раскрашивает в разные цвета. И ни разу не промахивается, вне зависимости от того, как там отсортированы строки и какие установлены фильтры. Лапуль, мне абсолютно насрать, что Вы там признаете или не признаете - я давно состоявшийся человек в профессиональном плане, а Вас я вообще программистом не считаю.
 
Сомнений не было, вот вы и показали кто вы есть на самом деле: вечно скулящий, да ещё и распальцованный неуч.
Цитата
Старатель написал:
а потому сольётесь под любым предлогом.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, Здравствуйте!

Ваше пожелание зарегистрировано.  Мы постараемся рассмотреть его и  сообщить Вам результаты анализа. Впоследствии, по результатам анализа,  будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Старатель, Лапуль, я ещё раз повторяю: алгоритмически задача формулируется так: переместить курсор на нужный элемент множества. Редкий программист из прошлого тысячелетия потратит на подобную "проблему" более одной секунды - это только нынешнее криворукое стадо готово тратить на это дни, недели, месяцы, годы и засирает тут ветки пожеланиями в очередной раз изуродовать софт, дабы их идиотские задумки могли хоть как-то работать. У меня, лапуль, код уже много месяцев прекрасно работает. Мало того - зарабатывает.

Вот сегодняшний скрин, для общего развития: слева виден кусочек старой версии скрипта, его перекрывает таблица от нового, оба работают на одном и том же массиве данных, только старый реально торгует, а новый виртуально - устроил между ними соревнование. Новая версия читает старый формат входного файла (совместимость снизу), а записывает уже в новом, т.е. если скрипт запустить и сразу остановить, сработает как конвертер. Строки таблицы старой версии отсортированы по названию тикера, новой - по цене. В каждой версии под контролем порядка 1000 тикеров (это на тему Вашего же скулежа про загрузки CPU - ещё одна смехотворная "проблема"). Работают фильтры: а) выдавать все или те, которые есть в портфеле и, независимо от первого б) показывать только тикеры, торгующиеся по выбранной валюте (рубли, доллары, евро). У каждого тикера доступны три вида контекстного меню: а) для ручной торговли б) для корректировки в диалоге количества доступной скрипту валюты (можно добавить или вывести любую сумму) и в) меню по таймфреймам. А Вы можете скулить дальше, "маэстро" - на что Вы ещё способны? :wink:  
Страницы: 1
Читают тему (гостей: 1)
Наверх