[Gelöst] Dynamisches Grid

14. Januar 2010 15:37

Hallo,

ich habe in einem Formular ein Grid, das je Auswahl (über Lookup), Daten aus einer anderen Tabelle anzeigen soll. Mein Ansatz ist folgender:
Am Formular gibt es eine Datasource Documents. Am Grid lege die die Eigenschaften für Datasource = Documents und DataGroup = AutoReport fest. In der Modified-Methode, die die Datenquelle ändern soll, rufe ich eine andere Methode am Formular auf, die folgendes macht:
dictTable = new DictTable(tablenum(PurchTable));
Documents_ds.table(dictTable.id());
Documents_ds.research();
Documents_ds.refresh();
element.redraw();

Im Grid ändern sich zwar die Spalten, es werden aber keine Daten angezeigt.
Mehrere Datasources inkl. Grids anzulegen, um sie ein- und auszublenden, ist keine Lösung, da ich einen generischen Ansatz verfolge und die auszugebenden Tabellen frei konfigurierbar sind.
Hat jemand schon mal so etwas gemacht oder eine Lösung parat?

Gruß
Zuletzt geändert von L4R5 am 18. Januar 2010 16:44, insgesamt 2-mal geändert.

Re: Dynamisches Grid

15. Januar 2010 14:59

Es gibt hier 2 Klassen

Code:
FormDataSources = formRun.datasource()
FormBuildDataSources  = formRun.Form().datasource()


Wenn ich hier hin verweisen darf: http://www.axaptapedia.com/Runtime_form_controls

Das Problem was du hast ist (mal einfach ausgedrückt), dass die FormDataSource mit "Table1" angelegt wird (formBuildDataSource) und du
sie nachträglich auf "Table2" abänderst (formDataSource), aber auf der FormBuildDataSource ist immer noch "Table1".
D.h wenn du dir die Query dazu ansiehst geht die noch auf "Table1". Die kann man jetzt dann von mir aud auch noch händisch anlegen und
auf die FomdataSource darufstellen. Dann bekommst du aber vom Kernel ne schöne Error Meldung die da lautet "der Parameter für set record ist falsch"

--> Die Tabellen auf der FormDataSource und FormBuildDataSource müssen soweit ich weis gleich sein.
Ich befürchte aber das das abändern der FormBuildDataSourceNachträglich nicht mehr so hinhaut wie man sich das vorstellt.
Sauber funktioniert das alles wenn man es vor dem super() aufruf im init der Form macht. Nachträgliche Änderungen in der FormBuildControl müssen
warscheinlich irgendwie nachinitialisiert werden wenn den dies überhaupt möglich ist.
Es dürften also einige inits laufen die dir das dynamische abändern bzw zuordnen in der form sauber vermießen :-(

Naja. ich weiß... viel Info ist es nicht, aber vll hilfts dir ja irgendwie weiter.

lg
Christian

Re: Dynamisches Grid

18. Januar 2010 16:43

Da sich das ganze nicht in einem einzigen Formular realisieren lässt, bin ich einen etwas anderen Weg gegangen::
Ich habe zwei verschiedene Formulare erstellt: ein vorgelagertes Formular, um eine Vorauswahl zu treffen, und ein generisches Formular, das den dynamischen Inhalt darstellen soll. Das zweite Formular hat 2 Datenquellen: eine für die Kopftabelle und eine für die Positionstabelle. Über eine Klasse, die ich so wie SysTableBrowser aufgebaut habe, werden die Datenquellen festgelegt und das Formular geöffnet. In der Clicked-Methode eines Buttons, der sich auf dem ersten Formular befindet, wird eine Instanz der Klasse erzeugt, die notwendigen Parameter für die TableId´s etc. übergeben und die run-Methode der Klasse aufgerufen. Und schon werden die Daten der angegebenen Tabellen in den Grids angezeigt.

Gruß Lars