04.10.2006, 20:32 | #1 |
Участник
|
Как пометить на grid_е несколько строк ?
Приветствую =)
Ребят, подскажите, как решить такую вот задачку: Дано: Грид с датасорсом. multiselect = true Задача: Программно выделить несколько строк (аналог: то же самое, как если бы зажав кнопку ctrl выбрали несколько строк) |
|
04.10.2006, 21:21 | #2 |
Участник
|
На примере закупок: (выделяем первые две строки в гриде)
X++: PurchTable_ds.first(); PurchTable_ds.mark(true); PurchTable_ds.next(); PurchTable_ds.mark(true); |
|
|
За это сообщение автора поблагодарили: Eland (1). |
04.10.2006, 22:54 | #3 |
Участник
|
Цитата:
X++: InventTable it; LedgerTable lt; ; while select it where it.ItemId like "01*" { lt.RecId = it.recid; InventTable_ds.markRecord(lt, 1); } При этом надо учитывать, что если записи нет в кэше, то будет происходить фетч с сервера, пока не будет получена нужная или не будут загружены все данные
__________________
Axapta v.3.0 sp5 kr2 |
|
04.10.2006, 23:01 | #4 |
Участник
|
Хмм. странно.
я взял две строки закупки: (они были в гриде) X++: PurchTable_ds.markRecord(PurchTable::find('zp0000019'), true); PurchTable_ds.markRecord(PurchTable::find('zp0000017'), true); ЗЫ Только что специально попробовал еще раз - понял в чем дело - они то помечаются как отмеченные, только на гриде это не отображается. (refresh надо делать - причем всех выделенных строк) Первым способом не нужно. Наткнулся в процессе на еще одну "фичу": Если зажать ctrl, выделить строку, а потом выделить ее же (кликнуть на другом поле этой же строки грида), то система воспринимает это, как то, что выделено 2 строки, и большая часть кнопок (на закупке, в частности) становится недоступной. Последний раз редактировалось kashperuk; 04.10.2006 в 23:29. |
|
05.10.2006, 08:21 | #5 |
Пенсионер
|
Цитата:
Сообщение от AndyD
Да? А у меня проходил такой финт ушами
X++: InventTable it; LedgerTable lt; ; while select it where it.ItemId like "01*" { lt.RecId = it.recid; InventTable_ds.markRecord(lt, 1); } При этом надо учитывать, что если записи нет в кэше, то будет происходить фетч с сервера, пока не будет получена нужная или не будут загружены все данные lt.RecId = it.recid;
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
05.10.2006, 08:49 | #6 |
Участник
|
Это просто иллюстрация, что markRecord() смотрит только на RecId табличной переменной. Точно так же можно было использовать Common или любую другую таблицу
PS. Кстати, если подсунуть неициализированную табличную переменную, то получим фетч всех записей выборки из б/д
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 05.10.2006 в 08:53. |
|
05.10.2006, 10:18 | #7 |
Участник
|
Отлично !
Спасибо, парни. А кто знает, чем отличается Код: InventTable_ds.markRecord(lt, 1); Код: InventTable_ds.markRecord(lt, 2); |
|
05.10.2006, 10:21 | #8 |
Участник
|
там 1 или 0 (пометить или нет)
То есть 2 от 1 ничем, по сути, не отличается, потому что как "пометить" воспринимается и 2 и 1. (главное чтоб не 0) И благоданость здесь выказывают немного иначе. (см. Одобрить сообщение) Последний раз редактировалось kashperuk; 05.10.2006 в 10:35. |
|
05.10.2006, 11:19 | #9 |
Участник
|
Ок. =)
Есть ещё один вопрос. Есть ли способ сбросить ВСЕ выделения с датасорса не перебирая каждую запись ? |
|
05.10.2006, 11:27 | #10 |
Участник
|
Попробуйте PurchTable_ds.research();
|
|