19.07.2004, 13:57 | #21 |
Участник
|
Цитата:
Изначально опубликовано dn
На вскидку, на методе active() источника данных SalesTable формируешь map для строк этого заказа - (номер лота строки - порядковый номер). А в дисплей методе на источнике данных SalesLine возвращаешь по номеру лота порядковый номер. супер! почти не тормозит |
|
01.10.2012, 16:33 | #22 |
Участник
|
Когда на форме один датасорс и один грид просто так уже не отделаешься. Более универсально будет выглядеть вариант, использующий query().
Метод на форме : X++: void calcLineNum(Query _query,TableId _tableid) { Common Common; queryRun qR; int LineNum; ; mapLineNum = new Map(Types::Int64,Types::Integer); qR = new QueryRun(_query); qR.reset(); while (qR.next()) { Common = qR.get(_tableid); LineNum++; mapLineNum.insert(Common.RecId,LineNum); } } X++: public void executeQuery() { element.calcLineNum(this.query(),this.table()); super(); } X++: display Int getLineNum(MyTable _MyTable) { ; if (mapLineNum.exists(_MyTable.RecId)) return mapLineNum.lookup(_MyTable.RecId); else return 0; } Удобно тем, что в Query уже есть и нужная сортировка и нужные range-и. Номера строк не сбиваются и идут в том же порядке, как и отображаются в гриде. Сегодня пришлось вернуться к этой теме. Попросили очень привиредливые пользователи. Говорили, что жуть как нужно.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 01.10.2012 в 16:36. |
|