none
Zellen im Grid auslesen RRS feed

  • Frage

  • Hallo zusammen,

    ich bräuchte mal wieder eure geschätzte Hilfe.

    Ich habe ein Grid mit 10 Spalten. Mit der entsprechenden Logik (und unter Verwendung von ActiveRow, - Column sowie RelativeRow und -Column) funktioniert es recht gut, die richtige Zeile im Grid zu bestimmen.

    Wenn ich nun den Wert der ersten Zelle in einer bestimmten Zeile auslesen möchte sieht der Code ungefähr wie folgt aus:

           Thisform.Grid1.activatecell(varrow,1)

           Testvariable1 = Thisform.Grid1.column1.text1.value

    In varrow steht ne vernünftige Zeilennummer im sichtbaren Bereich des Grids drin. Soweit so gut. Ich habe nun festgestellt, daß das Auslesen in der Form

           Testvarable2 = = Thisform.Grid1.column10.text1.value

    nicht automatisch die Zelle in der Zeile 'varrow ' ausliest, sondern immer den Wert von Spalte 10 / Zeile 1. D. h. ich muß auch beim Auslesen der Zelle in Spalte 10 die Anweisung

          Thisform.Grid1.activatecell(varrow,10)

    angeben.

    Stimmt meine Behauptung oder mache ich etwas falsch? Muß ich jedesmal beim Auslesen eine Zelle vom Grid ihre Position durch Grid.Activatecell(r,c) zuerst anwählen?

    Viele Grüße

    Christoph

    Donnerstag, 29. März 2018 12:48

Antworten

  • Das stimt, es gibt eben nicht wirklich N Textboxen pro Zeile, Es gibt wirklich nur eine Textbox pro Gridspalte und die hat nur den aktiven Datensatz geladen. Du kommst über die Grid controls also auch nur an das dem Grid zugrundeleigende Tabelln/View/Cursorfeld des aktiven records. Das Grid malt nur weitere Zeilen, es erzeigt nicht 5-20 Controls je nach Anzahl sichtbarer Zeilen.

    Das ganze behandeln des Grids mit ActivateCell und Scroll etc. kann nur der Optik dienen, nie dem Zugriff auf Daten, den regelst Du besser über Zugriff auf die Tabelle selbst.

    PS: Das beste für den Zugriff auf eine bestimmte "Zelle" sprich das Feld eines dann leider nicht unbedingt gerade aktiven Datensatzes ist, dahin und wieder zurück zu navigieren, ohne das Grid dabei "aufzuscheuchen" sich entsprechend zu aktualisieren, und fast jedes Event in sich selbst kann das. Bequemer wird es mit tabellenweiser Pufferung, so dass man auch keine automatische Speicherung geänderter Felder/Sätze und damit Insert/Update/Delete Trigger anfeuert, wenn man in den Daten navigiert. Per se kannst Du in jeder Methode und jedem Event alles in der Weise machen, sofern am Schluss der Anfangszustand wiederhergestellt ist, es sei denn Du schießt mit Timern die Refreshs auslösen ein Eigentor. Für die Zeit muss Dein Code Alleinherrscher sein und ist es dank VFPs single threaded Natur auch.

    Tschüß, Olaf.


    Olaf Doschke - https://www.doschke.name

    • Bearbeitet Olaf Doschke Freitag, 30. März 2018 10:17
    • Als Antwort markiert CLTBEN Dienstag, 3. April 2018 09:58
    Donnerstag, 29. März 2018 15:40

Alle Antworten

  • Das stimt, es gibt eben nicht wirklich N Textboxen pro Zeile, Es gibt wirklich nur eine Textbox pro Gridspalte und die hat nur den aktiven Datensatz geladen. Du kommst über die Grid controls also auch nur an das dem Grid zugrundeleigende Tabelln/View/Cursorfeld des aktiven records. Das Grid malt nur weitere Zeilen, es erzeigt nicht 5-20 Controls je nach Anzahl sichtbarer Zeilen.

    Das ganze behandeln des Grids mit ActivateCell und Scroll etc. kann nur der Optik dienen, nie dem Zugriff auf Daten, den regelst Du besser über Zugriff auf die Tabelle selbst.

    PS: Das beste für den Zugriff auf eine bestimmte "Zelle" sprich das Feld eines dann leider nicht unbedingt gerade aktiven Datensatzes ist, dahin und wieder zurück zu navigieren, ohne das Grid dabei "aufzuscheuchen" sich entsprechend zu aktualisieren, und fast jedes Event in sich selbst kann das. Bequemer wird es mit tabellenweiser Pufferung, so dass man auch keine automatische Speicherung geänderter Felder/Sätze und damit Insert/Update/Delete Trigger anfeuert, wenn man in den Daten navigiert. Per se kannst Du in jeder Methode und jedem Event alles in der Weise machen, sofern am Schluss der Anfangszustand wiederhergestellt ist, es sei denn Du schießt mit Timern die Refreshs auslösen ein Eigentor. Für die Zeit muss Dein Code Alleinherrscher sein und ist es dank VFPs single threaded Natur auch.

    Tschüß, Olaf.


    Olaf Doschke - https://www.doschke.name

    • Bearbeitet Olaf Doschke Freitag, 30. März 2018 10:17
    • Als Antwort markiert CLTBEN Dienstag, 3. April 2018 09:58
    Donnerstag, 29. März 2018 15:40
  • Hallo Olaf,

    vielen Dank für Deine Beschreibung und somit die Bestätigung für meine Vermutung.

    Gruß

    Christoph

    Dienstag, 3. April 2018 09:58