Отложим (на время) динамическое формирование таблицы и подумаем о том, как у нас эта самая таблица будет заполняться данными. Как мы решили, данные будут грузиться не сразу все, а по мере необходимости.
Максимально упростим пример. Вот форма, на ней таблица, в ней один столбец, в который должно выводиться itemId из invatTable, которое являетмся dataSource в этой форме.
В executeQuery() мы определяем количество записей в таблице(забудем пока про производительность и оптимальность и попробуем просто понять принцип работы) и добавляем первые 20 записей в таблицу:
PHP код:
public void executeQuery()
{
int i, t;
;
super();
qr = this.queryRun();
recCount = SysQuery::countTotal(qr);
Table.rows(recCount);
t = min(20, recCount);
qr = this.queryRun();
it = qr.get(tableNum(InventTable));
itemId = it.ItemId;
Table.cell(1,1).data(itemId);
displayCount = 1;
for (i=2; i<=t; i++)
{
qr.next();
it = qr.get(tableNum(InventTable));
itemId = it.ItemId;
Table.cell(1,i).data(itemId);
displayCount++;
}
}
Перекрываем textChange() у контрола, который привязан к таблице:
PHP код:
public void textChange()
{
super();
if (displayCount < recCount)
{
qr.next();
it = qr.get(tableNum(InventTable));
itemId = it.ItemId;
displayCount++;
Table.cell(1, displayCount).data(itemId);
// info("добавлена еще одна запись");
print itemId;
// pause;
}
}
То есть при вызове этого метода из таблицы считывается следующая запись и добавляется в таблицу, тем самым эмулируя поведение серверных курсоров ADO.
Когда будешь пробовать попробуй сначала так, а затем раскомментировав сторки. Результаты чуть-чуть разные, но выводы примерно такие:
Если мы хотим, чтобы textChange() вызывался со 100% гарантией пользователь должен щелкнуть мышкой на одну из ячеек таблицы и клавишами "стрелка вниз", PageDown перемещаться по таблице. Так вроде все работает. Если же пользователь начинает скролировать таблицу, то часто получается ситуация, когда пользователь начинает видеть пустые незаполненные строки.. в общем сам увидишь.
Кроме того, textChange() будет вызываться даже тогда, когда пользователь начнет перемещаться по таблице вверх - вроде бы не надо, но в таблицу все равно будут добавляться новые записи.
Можно сделать следующее(только что пришло в голову) - выбросить из таблицы скролбар(раз им все равно пользоваться нельзя), а в замен попробовать подсунуть пользователю что нибудь другое(в простейшем случае пару кнопок). Положение курсора в таблице тображать например с помощью progressBar'а.

В общем все дело опять уходит в дебри и превращается в неудобную конструкцию.
Буду дальше экспериментировать, но и ты скажи свое мнение, а то может я вообще не в том направлении двигаюсь и фигней занимаюсь ?