Показать сообщение отдельно
Старый 01.10.2012, 16:33   #2  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Когда на форме один датасорс и один грид просто так уже не отделаешься. Более универсально будет выглядеть вариант, использующий 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);
    }
}
в executeQuery() :
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;
}
естесственно mapLineNum - глобальная переменная.
Удобно тем, что в Query уже есть и нужная сортировка и нужные range-и. Номера строк не сбиваются и идут в том же порядке, как и отображаются в гриде.
Сегодня пришлось вернуться к этой теме. Попросили очень привиредливые пользователи. Говорили, что жуть как нужно.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 01.10.2012 в 16:36.