Когда на форме один датасорс и один грид просто так уже не отделаешься. Более универсально будет выглядеть вариант, использующий 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-и. Номера строк не сбиваются и идут в том же порядке, как и отображаются в гриде.
Сегодня пришлось вернуться к этой теме. Попросили очень привиредливые пользователи. Говорили, что жуть как нужно.