(fast)gelöst: Felder in einem Grid (nicht) anzeigen

16. März 2012 16:47

Hallo Leute,

ich habe eine Form auf der ein grid plaziert ist und mit einer Datasource versehen ist.
Diese Form wird von verschiedenen Orten aus aufgerufen um Daten anzuzeigen.

Basierend darauf von wo aus die Form aufgerufen wird möchte ich gern ein einzelnes Feld NICHT anzeigen lassen.

Bsp.: Eine Form samt Grid. Datasource ist z.B. die Tabelle Custtable. Standardmäßig werden einfach alle Tabellenfelder im Grid angezeigt. Nun möchte ich gern das Feld AccountNum nicht im Grid anzeigen lassen.

Ich bekomme zwar Referenzen gesetzt auf so ziemlich alle FormControls, wie ich allerdings ein einzelnes Feld ausblende... ich bekomme es einfach nicht hin.

Ich hatte versucht ie (Überschreib)Methode SelectControl der Form zu nutzen um evtl. an das Feld im Grid zu kommen - liefert mir aber, wenn ich ein Feld im Grid anklicke, nur das Grid als ausgewähltes Control zurück.

Kann mir da wer weiterhelfen?

Dank schonmal & schoenes WE!

greetz
Joey
Zuletzt geändert von nobido am 27. März 2012 11:11, insgesamt 1-mal geändert.

Re: Felder in einem Grid (nicht) anzeigen

20. März 2012 22:00

Hi,

wenn du das Feld "global" auf der Maske ausblenden möchtest solte dieser Weg funktionieren:
Code:
Table_ds.object(fieldNum(Table, Field1)).visible(False);


Hiermit setzt du das Feld der Datasource auf "nicht Sichtbar". Hat aber zur Folge, dass dieses feld, z.B. auf einem anderen reiter auch nicht mehr angezeigt wird.

Wenn du nur ein Feld/Control im "Übersichtsgrid" einer AMske ausblenden möchtest, dieses aber auf anderen reitern weiterhin angezeigt werden soll, kann du das (nur) über das Control auf der Form und nicht über das feld der Datasource setzen.

Hierfür musst du zuerst die Eigenschaft "Autodeclaration" des entsprechende Fromcontrols auf YES setzen. Nun kannst du driekt mit dem Namen des Formcontrols steuern ob dieses angezeigt werden soll oder nicht (Methode visible).

Wenn du die Property nicht umstellen möchtest könntest du dies aber auch mittels folgendem Code setzen:
Code:
element.design().controlName("Fieldcontrol").visible(false);

Re: Felder in einem Grid (nicht) anzeigen

27. März 2012 11:10

Hallo Axel (ich hoffe das 'Du' ist ok),

danke für die Antwort.
Leider lässt sich meine Idee/Vorstellung damit nicht umsetzen.

Ich hatte es auf ähnliche Weise versucht und die Methode DisplayOptions bemüht. Da lässt sich zwar viel tolles mit machen.
Wenn ich allerdings ein Tabellenfeld abschalte, egal ob nun in DisplayOptions oder über eine Methode z.B. dirket am DataGrid, ist es für die gesamte Tabelle am Grid dann weg.

Die Idee, das Ziel war aber: Ein einzelnes (einzelne) Tabellenfeld(er) pro DataRow abzuschalten bzw.: auf AllowEdit = false zu setzen.
Ich habe es nun dahin gehend gelöst dass ich mir ein CheckBox-FormControl auf der Form plaziert habe welches dann, basierend auf bestimmten Ergebnissen einer Datenbankabfrage, dieses Feld auf AllowEdit = true bzw. false setzt.

DocuField.png


Das rot markierte Feld wurde vorher im Grid mit angezeigt. Soll(te) aber nur dann änderbar sein, wenn es sich beim Dokumententyp um eine Note bzw. Notiz handelt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: (fast)gelöst: Felder in einem Grid (nicht) anzeigen

31. März 2012 13:40

Hi,

nobido hat geschrieben:Die Idee, das Ziel war aber: Ein einzelnes (einzelne) Tabellenfeld(er) pro DataRow abzuschalten bzw.: auf AllowEdit = false zu setzen.
Ich habe es nun dahin gehend gelöst dass ich mir ein CheckBox-FormControl auf der Form plaziert habe welches dann, basierend auf bestimmten Ergebnissen einer Datenbankabfrage, dieses Feld auf AllowEdit = true bzw. false setzt.


wenn du pro Datarow einzelne Felder aktivern oder deaktivieren (Bsp. AllowEdit = false) möchtest, musst du zuerst die "richtige" methode der DataSource überschreiben.

Den Code den ich dir im letzten Post geschreiben hatte, ermöglicht dir ja nur den zugriff auf die Properties des Feldes.
Entscheident ist jetzt, wo bzw. wann dieser Code ausgeführt wird. :-)

Um pro Datarow ein Feld für die Bearbeitung zu aktivieren / deaktivieren, muss du die Methode "active" der jeweiligen Datasource überschreiben.
Diese Methode wird immer ausgeführt, wenn die aktuelle, selektierte oder ausgewählte Datarow gewechselt wird.
Wenn du nun die Methode "active" so überschreibst, dass der Code zum aktivieren / deaktivieren ausgeführt wird, hast du genau das Ergebnis welches du haben möchtest.

Beispiel:
Code:
public int active()
{
   int ret;
   ;
   ret = super();
 
   if([datasource table name].[Column field name] == [Your check value])
   {
      [datasource table name]_ds.object(fieldNum([datasource table name], [Column 1 field name])).allowEdit(false);
   }
   else
   {
      [datasource table name]_ds.object(fieldNum([datasource table name], [Column 1 field name])).allowEdit(true);
   }
 
   return ret;
}

Re: (fast)gelöst: Felder in einem Grid (nicht) anzeigen

2. April 2012 08:45

Hiho nochmal,

nee. Sorry, ich scheine mich falsch ausgedrückt zu haben.

Es geht bzw. ging nicht um eine Einstellung wie AllowEdit etc.
Der Plan war das entsprechende Feld Zeile für Zeile nicht sichtbar zu setzen. Und das direkt am Grid/im Grid.

Bsp. so in etwa ---> dataFieldName.visible(false)

Die CheckBox, die ich eingefügt habe, stellt ja letztendlich nur den Platzhalter für einen boolschen Wert eines Feldes im Datensatz dar.

Und dieses Feld soll nur dann sichtbar und änderbar sein, wenn die DocuView von bestimmten Forms aus aufgerufen wird:

Bsp.:

WENN die caller-Form Form ListPage ist, DANN soll das Feld angezeigt werden. ANSONSTEN soll es nicht angezeigt werden.

Joar... aber passt schon. Hab's ja gelöst.

Dafür tun sich grad andere Fragen an anderer Stelle auf...

man liest sich.

nette Woche euch.
greetz