powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Find in Filter buffer
12 сообщений из 12, страница 1 из 1
Find in Filter buffer
    #33007381
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли способ найти строку удовлетворяющую критериям поиска в буфере DW Filter!, кроме как простым циклом по всем отфильтрованным строкам?
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33007809
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E-docЕсть ли способ найти строку удовлетворяющую критериям поиска в буфере DW Filter!, кроме как простым циклом по всем отфильтрованным строкам?

Не знаю, будет ли это быстрее, но можно попробовать так:
Код: plaintext
1.
2.
3.
4.
5.
Datastore lds_temp
lds_temp = Create Datastore
lds_temp.Create(ldw_1.Describe("datawindow.syntax"))
ldw_1.RowsCopy( 1 , ldw_1.FilteredCount(), Filter!, lds_temp,  1 , Primary!)
lds_temp.Find(....)
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33010643
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам так не делал, но можно попробовать так:
Отключаешь прорисовку
Запоминаешь и Отключаешь фильтр
добавляешь к условию поиска условие фильтра
Ищешь
делаешь что надо
Возвращаешь фильтр
Включаешь прорисовку
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33011328
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E-docЕсть ли способ найти строку удовлетворяющую критериям поиска в буфере DW Filter!, кроме как простым циклом по всем отфильтрованным строкам?Из чистого любопытства - а зачем все это ? Если возникает нужда - накладываешь фильтр, а затем по команде Find(...) - ищешь строку. Я не обсуждаю стиль - просто у меня никогда не было такой проблемы.
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33011363
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНе знаю, будет ли это быстрее, но можно попробовать так:
Тогда уж лучше sharedata воспользоваться (с небольшими ограничениями).
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33011514
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly MoskovskyНе знаю, будет ли это быстрее, но можно попробовать так:
Тогда уж лучше sharedata воспользоваться (с небольшими ограничениями).
Можно пример кода? А то я не очень представляю, как можно ShareData в данном случае применить.
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33011722
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМожно пример кода? А то я не очень представляю, как можно ShareData в данном случае применить.
Да, что-то не получается. Я почему-то подумал, что между буфферами их можно независимо таскать в разных DataWindow, оказалось не так :)
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33011809
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryoСам так не делал, но можно попробовать так:
Отключаешь прорисовку
Запоминаешь и Отключаешь фильтр
добавляешь к условию поиска условие фильтра
Ищешь
делаешь что надо
Возвращаешь фильтр
Включаешь прорисовку

На всякий случай, надо помнить, что при применении одного и того же фильтра порядок строк в общем случае может получиться разным.
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dw_2.Setfilter("id < 200")
dw_2.Filter()

dw_2.Setfilter("id >= 200")
dw_2.Filter()

dw_2.Setfilter("id < 200")
dw_2.Filter()
- такая последовательность инвертирует порядок строк в DW
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33012182
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант придумал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
long ll_start, ll_filtered

ll_start = dw_1.RowCount() +  1 
ll_filtered = dw_1.FilteredCount()
dw_1.RowsMove( 1 , ll_filtered, Filter!, dw_1, ll_start, Primary!)
ll_find = dw_1.Find("name='something'", ll_start)
// ---------------------делаешь что надо
dw_1.RowsMove(ll_start, ll_start + ll_filtered, Primary!, dw_1,  1 , Filter!)
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33012198
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryoеще вариант придумал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
long ll_start, ll_filtered

ll_start = dw_1.RowCount() +  1 
ll_filtered = dw_1.FilteredCount()
dw_1.RowsMove( 1 , ll_filtered, Filter!, dw_1, ll_start, Primary!)
ll_find = dw_1.Find("name='something'", ll_start)
// ---------------------делаешь что надо
dw_1.RowsMove(ll_start, ll_start + ll_filtered, Primary!, dw_1,  1 , Filter!)


А уверен, что в результате твоего RowsMove ряды на самом деле в Primary! буфере окажутся?
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33012351
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему решил временным отключением фильтра, поиском строки, выполнением нужных действий и последующим возвратом фильтра. Но как-то это... неаккуратненько. :))
...
Рейтинг: 0 / 0
Find in Filter buffer
    #33013516
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА уверен, что в результате твоего RowsMove ряды на самом деле в Primary! буфере окажутся?проверил, все работает. на тестовом примере (6500 строк в фильтре) вариант с перемещением строк выполняется за 15-16мс, с отключением и восстановлением фильтра за 45-60мс
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Find in Filter buffer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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