AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2003, 09:51   #20  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Отложим (на время) динамическое формирование таблицы и подумаем о том, как у нас эта самая таблица будет заполняться данными. Как мы решили, данные будут грузиться не сразу все, а по мере необходимости.
Максимально упростим пример. Вот форма, на ней таблица, в ней один столбец, в который должно выводиться itemId из invatTable, которое являетмся dataSource в этой форме.

В executeQuery() мы определяем количество записей в таблице(забудем пока про производительность и оптимальность и попробуем просто понять принцип работы) и добавляем первые 20 записей в таблицу:

PHP код:
public void executeQuery()
{
    
int it;
    ;
    
super();

    
qr this.queryRun();

    
recCount SysQuery::countTotal(qr);
    
Table.rows(recCount);

    
min(20recCount);

    
qr this.queryRun();
    
it qr.get(tableNum(InventTable));
    
itemId it.ItemId;

    
Table.cell(1,1).data(itemId);
    
displayCount 1;


    for (
i=2i<=ti++)
    {
        
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(1displayCount).data(itemId);
//        info("добавлена еще одна запись");
        
print itemId;
  
//      pause;
    
}

То есть при вызове этого метода из таблицы считывается следующая запись и добавляется в таблицу, тем самым эмулируя поведение серверных курсоров ADO.
Когда будешь пробовать попробуй сначала так, а затем раскомментировав сторки. Результаты чуть-чуть разные, но выводы примерно такие:

Если мы хотим, чтобы textChange() вызывался со 100% гарантией пользователь должен щелкнуть мышкой на одну из ячеек таблицы и клавишами "стрелка вниз", PageDown перемещаться по таблице. Так вроде все работает. Если же пользователь начинает скролировать таблицу, то часто получается ситуация, когда пользователь начинает видеть пустые незаполненные строки.. в общем сам увидишь.

Кроме того, textChange() будет вызываться даже тогда, когда пользователь начнет перемещаться по таблице вверх - вроде бы не надо, но в таблицу все равно будут добавляться новые записи.

Можно сделать следующее(только что пришло в голову) - выбросить из таблицы скролбар(раз им все равно пользоваться нельзя), а в замен попробовать подсунуть пользователю что нибудь другое(в простейшем случае пару кнопок). Положение курсора в таблице тображать например с помощью progressBar'а. В общем все дело опять уходит в дебри и превращается в неудобную конструкцию.

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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
FormTableControl и сортировка AxDude DAX: Программирование 3 22.08.2007 08:12
Основы работы с FormTableControl PavelSR DAX: Программирование 12 21.09.2006 10:31
FormDataSource sassas DAX: Функционал 13 05.08.2004 17:25
Различные типы связей (LinkType) для FormDataSource Maxim Gorbunov DAX: База знаний и проекты 1 16.05.2004 13:20
Собственный SQL запрос в FormDataSource Alexey DAX: База знаний и проекты 0 20.12.2001 00:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:31.