25.02.2010, 17:37 | #1 |
Участник
|
Grid+Ctrl+MouseDown как поймать событие ?
Хотелось бы при выборе на GRID-е нескольких записей ловить событие снятие или установки выбора
|
|
25.02.2010, 17:40 | #2 |
Ищущий знания...
|
какая то странная задача, а по подробней можно?
изначально что нужно? возможно это решается более простым путем
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
25.02.2010, 17:51 | #3 |
Участник
|
X++: for (_DocuCard = DocuCard_ds.getFirst(true)? DocuCard_ds.getFirst(true): DocuCard_ds.cursor(); _DocuCard; _DocuCard = DocuCard_ds.getNext()) { ........... } |
|
25.02.2010, 17:59 | #4 |
Ищущий знания...
|
Цитата:
по поводу грида, и определения, что выделено, а что нет, я насчет таких возможностей не слышал.. да и не понятно как например опеределить, закончил человек выделять или нет... что приходит в голову: 1. выполнить цикл for по дата сору дважды, первый раз для того что вам нужно для проверки, второй раз, для непосредственно выполнения. 2. выполнить этот цикл один раз, заполнить по нему временную таблицу. и далее на основе данных временной таблице выполнять все нужные операции. по мне лучше второй вариант З.Ы. может конечно для ваших целей, ни то, ни другое не подойдет.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
25.02.2010, 19:07 | #5 |
Moderator
|
Цитата:
X++: cntAll=0; // первоначальный подсчёт записей for ( common = gridDataSource.getFirst(1) ? gridDataSource.getFirst(1) : gridDataSource.cursor(); common ; common = gridDataSource.getNext() ) { cntAll++; } // эмпирически подобранная формула, исходя из размера файла примерно 20 МБ (грубо 20 млн. байт) cntRecommended = decRound(20000000. / sumBytes * 4.,-2); // округляем до сотен cntFrom = 1; // если записей очень много, то предложение вывести в несколько подходов if (cntAll > cntRecommended) { dialog = new Dialog('Слишком много записей для вывода'); dialogText = dialog.addText(strFmt('Запрошенная выборка содержит %1 записей. ' + 'Вывод такого количества записей за один раз может привести к проблемам ' + 'при сохранении и последующем открытии получившегося файла Excel.\n\n' + 'Однако, Вы можете выгрузить все данные несколькими порциями, ' + 'запуская процедуру выгрузки несколько раз ' + 'и каждый следующий раз увеличивая значения в полях "От записи" и "до записи" на размер порции. ' + 'Рекомендуемый сейчас размер порции - %2 записей. ' + 'Поэтому рекомендуется установить 1 и %2 для первой выгрузки, %3 и %4 - для второй и т.д.\n\n' + 'Вы также можете задавать границы порций, исходя из своих собственных соображений.\n\n' + 'ВАЖНО! Перед многоразовой выгрузкой следует отсортировать строчки таблицы заявок по возрастанию кодов заявок ' + 'и не менять этот порядок до окончания всего процесса! Если Вы не уверены, что уже выполнили такую сортировку - ' + 'нажмите "Отмена" и начните еще раз.' , cntAll, cntRecommended, cntRecommended+1, cntRecommended*2)); dialogText.displayHeight(21); dialogText.displayLengthValue(50); dialog.addGroup('Вывести в Excel').columns(2); dialogFrom = dialog.addFieldValue(Types::Integer, 1, 'От записи'); dialogTo = dialog.addFieldValue(Types::Integer, cntRecommended, 'до записи'); dialog.run(); if (! dialog.closedOk()) return; cntFrom = dialogFrom.value(); cntTo = dialogTo .value(); } cnt=0; // ПОВТОРНЫЙ (основной) ПРОБЕГ по датасорсу for ( common = gridDataSource.getFirst(1) ? gridDataSource.getFirst(1) : gridDataSource.cursor(); common ; common = gridDataSource.getNext() ) { cnt++; if (cntAll > cntRecommended) { if ((cnt < cntFrom) || (cnt > cntTo)) continue; } if (cnt mod 100 == 0) print strFmt('Уже выведены записи с %1 по %2', cntFrom, cnt); ....................................... } Вот какая картинка возникает через пару минут (отработка первого цикла) при выделении всех записей грида без фильтрации: Возможно, не очень оптимально, но я доволен. И по мне - так лучше потратить лишние пару минут, чем ринуться сразу выводить 56 тыщ строк по 130 (!) колонок. С другой стороны, пользователи очень не часто пытаются вывести всё имеющееся и "наказываются" таким сообщением. Обычные же выборки по паре-тройке тысяч записей практически не раздражают своей недолгой продолжительностью (пусть и с двойным пробегом). |
|
|
За это сообщение автора поблагодарили: sukhanchik (5). |