Zeilen nach oben schieben

Startseite Foren Deutsches LiveCode-Forum Zeilen nach oben schieben

Ansicht von 17 Antwort-Themen
  • Autor
    Beiträge
    • #26949
      Oliver122
      Teilnehmer

      Hallo zusammen,

      ich habe mal ein neues Problem. Meine Plattform ist Win.

      Ich versuch das Problem mal zu beschreiben.
      Mit einem Klick auf einen btn kann man eine Zeile aus mehreren Feldern genannt
      grp („block“&s) erzeugen. Das kann man sic wie die Zeilen einer Excel Tabelle vorstellen. Diese kann man dann beschreiben. Das funktioniert auch perfekt.

      Wenn eine Zeile nicht mehr gebraucht wird, kann man sie löschen. Mein Problem ist folgendes:
      Wenn eine Zeile gelöscht wird, sollen alle darunterliegenden aufrücken.
      Dies funktioniert aber nur selten. Meistens rücken sie nicht auf oder werden wild an eine andere Stelle gesetzt.

      Mein aktueller Versuch:

       if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then
            put the top of grp ("block"&s) into oben3
            set the top of grp ("block"&s) to oben3 -25 
         end if

      In oben2 steht der top Wert, der gelöschten Zeile.
      Auch andere Varianten haben nicht funktioniert.

      Ich hoffe ihr könnt mit der Beschreibung etwas anfangen.
      Danke im Voraus.

      Oliver

    • #26951
      Klaus Major
      Verwalter

      Dein kleines Skript ist natürlich völlig korrekt!

      Daher kommt es auf den Rest des Skriptes an, sieht ja aus,
      als würde Obiges in einem REPEAT Loop vorkommen.
      Also bitte mal posten.

    • #26952
      Oliver122
      Teilnehmer

      Hallo Klaus,

      hier das ges. Skript:

      global s, oben2, posi, lnr, tSkript3, tZahl, zz, grplist, oben3
      
      on openCard
         if the environment is "mobile" then
            put specialFolderPath("engine") into programmPfad
         else
            put the filename of this Stack into programmPfad
            set the itemDelimiter to "/"
            delete the last item of programmPfad
         end if
         if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then
            create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar")
         else
            
         end if
         put programmPfad &"/splash.livecode" into tZieldatei
         start using stack tZieldatei
      end openCard
      
      on posisetzen
         if posi = empty then
            put empty into lnr
            put 0 into oben2
            put 0 into s
            put empty into grplist
            put 0 into tZahl
            repeat with y = 1000000 down to 225 step - 25
               put y & return after posi
            end repeat
            sort lines of posi numeric
            //speichern
            posisetzen2
         else
            posisetzen2
         end if
      end posisetzen
      
      on posisetzen2
         add 1 to s 
         put line 1 of posi into oben2
         delete line 1 of posi
         //speichern
         silberline
      end posisetzen2
      
      // Spalten erstellen
      
      on silberline
         lock screen
         set the label of btn "Münzen2" to "New Line"
         
         create grp ("block"&s) in grp "GoSi"
         put the short name of grp ("block"&s) of grp "GoSi" & return after grplist
         
         create fld "Nr" in grp ("block"&s) of grp "GoSi"
         set the width of fld "Nr" of grp ("block"&s)  to 30
         set the height of fld "Nr" of grp ("block"&s)  to 25
         set the left of fld "Nr" of grp ("block"&s)  to 53
         set the locktext of fld "Nr" of grp ("block"&s) to true
         
         create fld "edelme" in grp ("block"&s) of grp "GoSi"
         set the width of fld "edelme" of grp ("block"&s)  to 250
         set the height of fld "edelme" of grp ("block"&s)  to 25
         set the left of fld "edelme" of grp ("block"&s) to 83
         
         create fld "kafda" in grp ("block"&s) of grp "GoSi"
         set the width of fld "kafda" of grp ("block"&s)  to 100
         set the height of fld "kafda" of grp ("block"&s)  to 25
         set the left of fld "kafda" of grp ("block"&s)  to 333 
         
         create fld "kafpr" in grp ("block"&s) of grp "GoSi"
         set the width of fld "kafpr" of grp ("block"&s)  to 100
         set the height of fld "kafpr" of grp ("block"&s)  to 25
         set the left of fld "kafpr" of grp ("block"&s)  to 433
         
         create fld "anz" in grp ("block"&s) of grp "GoSi"
         set the width of fld "anz" of grp ("block"&s)  to 100
         set the height of fld "anz" of grp ("block"&s)  to 25
         set the left of fld "anz" of grp ("block"&s)  to 533
         
         create fld "gew" in grp ("block"&s) of grp "GoSi"
         set the width of fld "gew" of grp ("block"&s)  to 100
         set the height of fld "gew" of grp ("block"&s)  to 25
         set the left of fld "gew" of grp ("block"&s)  to 633
         
         create fld "uz1" in grp ("block"&s) of grp "GoSi"
         set the width of fld "uz1" of grp ("block"&s)  to 50
         set the height of fld "uz1" of grp ("block"&s)  to 25
         set the left of fld "uz1" of grp ("block"&s)  to 733
         
         create btn "del1" in grp ("block"&s) of grp "GoSi"
         set the width of btn "del1"  of grp ("block"&s)  to 10
         set the height of btn "del1"  of grp ("block"&s)  to 25
         set the left of btn "del1"  of grp ("block"&s)  to 783
         set the label of btn "del1" of grp ("block"&s) to "x"
         put "global zz, posi" & CR & "on mouseUp" & CR & "put the top of the owner of me & return after posi" & CR & "put the short name of the owner of me into zz" & CR & "del1" & CR & "end mouseUp" into tSkript3
         set the script of btn "del1" of grp ("block"&s)  to tSkript3
         
         set the top of grp ("block"&s) of grp "GoSi" to oben2
         add 1 to tZahl
         del2
         unlock screen
      end silberline
      
      on del1
         sort lines of posi numeric
         show grp "dele"
      end del1
      
      on del3
         // Höhen anpassen
      repeat tZahl
            if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then
               put the top of grp ("block"&s) into oben3
               set the top of grp ("block"&s) to oben3 -25 
            end if
      end repeat
         put empty into posi
         repeat with y = 1000000 down to 225 step - 25
            put y & return after posi
         end repeat
         sort lines of posi numeric
         delete line 1 to tZahl of posi
      end del3
            
      on del2
         // nummerieren
         put empty into lnr
         if there is a grp ("block"&s) then
            repeat with g = 1 to tZahl
               put g & return  after lnr
            end repeat
            sort lines of lnr numeric
         end if
         if there is a grp ("block"&s) then
            repeat for each line c in lnr
               put line c of lnr into fld "Nr" of grp ("block"&s)
            end repeat
         end if
      end del2

      Wenn man auf den Löschen btn del1 drückt, wird von tZahl eins abgezogen.
      Durch btn del1 wird die Zeile gelöscht und dann del3 und dann del2 ausgelöst.

    • #26958
      Klaus Major
      Verwalter

      Hi Oliver,

      habe heute nicht so viel Zeit, daher hier nur ein paar wichtige Sachen, den Loop schaue ich mir am Wochenende an. Bitte alle Kommentare lesen und verstehen! 🙂

      on openCard
         #   if the environment is "mobile" then
         
         ## Alles was wir unter "Copy files" in den Standalone Application Settings" unserer Runtime hinzugefügt haben,
         ## finden wir später in -> specialfolderpath("resources")
         ## Dieser Specialfolderpath funktioniert auch in der IDE
         #      put specialFolderPath("engine") into programmPfad
         #   else
         #      put the filename of this Stack into programmPfad
         #      set the itemDelimiter to "/"
         #      delete the last item of programmPfad
         #   end if
         
         ## ABER!!!!
         ## Wir haben keine Schreibrechte in der Runtime in specialfolderpath("resources")!!!
         put specialfolderpath("documents") into programmPfad
         
         ## Du kannst immer nur EINEN Ordner zur selben Zeit erstellen, 
         ## daher muss das in zwei Schritten passieren!
         ## 1.
         put "/Speicherdatenhaus" after programmPfad
         if there is not a folder programmPfad then
            create folder programmPfad
         end if
         
         ## 2. 
         put "/SVar" after programmPfad
         if there is not a folder programmPfad then
            create folder programmPfad
         end if
         
         #   if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then
         #      create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar")
         #      ## Ohne einen ELSE Falls brauchen wir auch kein ELSE!
         #   else
         
         #   end if
         
         ## WICHTIG!!!
         ## Du musst er checken, ob es diese Datei dort schon gibt!
         ## Wenn nicht, musst Du sie von irgedwo (aus specialfolderpath("resources"), denke ich!?)  zuerst dorthin kopieren!
         ## put programmPfad &"/splash.livecode" into tZieldatei
         ## start using stack tZieldatei
      end openCard
      ## Sowohl im IF als auch im ELSE Falls gibt es den selben Befehl, das ist Redundanz! :-)
      ## Daher machen wir es besser so:
      on posisetzen
         if posi = empty then
            put empty into lnr
            put 0 into oben2
            put 0 into s
            put empty into grplist
            put 0 into tZahl
            repeat with y = 1000000 down to 225 step - 25
               put y & return after posi
            end repeat
            sort lines of posi numeric
            //speichern
            #      posisetzen2
            #   else
            #      posisetzen2
         end if
         posisetzen2
      end posisetzen

      Gruß

      Klaus

    • #27014
      Oliver122
      Teilnehmer

      Hallo Klaus,

      kannst du schon was über den Loop sagen?

      Danke im Voraus

      Oliver

    • #27016
      Klaus Major
      Verwalter

      Der Loop selber ist korrekt, aber ganz ohne Zusammenhang.
      Ich suche nach dem Skript, was eine Deiner Gruppen löscht und die restlichen Gruppen „aufrücken“ lässt!

    • #27019
      Oliver122
      Teilnehmer

      Hallo Klaus,

      ah ok das stelle ich nachher mit einigen Erläuterungen ein.

      Danke

    • #27033
      Oliver122
      Teilnehmer

      Hallo Klaus,

      das Skript zum Löschen ist:

      global oben2,zz, tZahl, grplist
      
      on mouseUp
         put the top of grp zz into oben2
         delete grp zz
         subtract 1 from tZahl
         del3
         del2
         hide grp "dele"
      end mouseUp

      Dies wird über

      on del1
         sort lines of posi numeric
         show grp "dele"
      end del1

      aufgerufen. Beim Druck auf ok, wird dann die Zeile gelöscht.

      Danke für deine Hilfe.

    • #27034
      Klaus Major
      Verwalter

      Wo wird zz mit einem Wert gefüllt?
      Finde ich nicht in Deinen Skripten hier.

    • #27041
      Oliver122
      Teilnehmer

      Wenn der btn del1 erzeugt wird.
      Dieser schreibt den Short name, der grp, bei Benutzung
      in die Variable zz.

    • #27054
      Klaus Major
      Verwalter

      Ich verstehe leider nicht, nach welchem Prinzip Du die Sache programmiert hast!?

      Was enthält die Variable -> posi
      Wozu:

      ...
      repeat with y = 1000000 down to 225 step - 25
         put y & return after posi
      end repeat
      ...

      Wie ist der Workflow, bitte in klaren Worten erklären und kannst Du bitte noch einmal alle Skripte posten mit:
      #########################################
      als Trenner für den Ort der Skripte. also sowas:

      ## Stack script:
      on openstack

      #########################################
      ## Button 1
      on mouseup

      ########################################

      Danke, sonst komme ich nämlich einfach nicht „rein“.

    • #27066
      Oliver122
      Teilnehmer

      Hallo Klaus,

      hier das ges. Skript:

      Skript Card Sparen; Open Card
      ###########################################################

      #### Ich denke deine Erklärungen hierzu habe ich verstanden.
      #### Dasganze wird aber noch angepasst. Das kommt später dran

      global s, oben2, posi, lnr, tSkript3, tZahl, zz, grplist, oben3
      
      on openCard
         if the environment is "mobile" then
            put specialFolderPath("engine") into programmPfad
         else
            put the filename of this Stack into programmPfad
            set the itemDelimiter to "/"
            delete the last item of programmPfad
         end if
         if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then
            create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar")
         else
            
         end if
         put programmPfad &"/splash.livecode" into tZieldatei
         start using stack tZieldatei
      end openCard
      ######################################################################################
      ## Positionieren erzeugt nur eine Variable posi, in welcher in jeder line der Wert für top steht.
      ## Wenn man den btn New Line ( Skript kommt noch) klickt und Silber, im Dropdown Menü wählt, wird 
      ## eine Line aus mehreren Felder erzeugt. Das erste endhählt die LNr., die automatisch eingetragen
      ## werden soll und das letzte ist ein btn, der die grp "dele" öffnet. Ein fld, mit zwei btn, abbrechen und
      ## ok. Bein klick auf ok, wird die Zeile gelöscht und alle darunterliegenden sollten nachrücken.
      ## In den fld dazwischen können Eintragungen gemacht werden.
      
      on posisetzen
         if posi = empty then
            put empty into lnr
            put 0 into oben2
            put 0 into s
            put empty into grplist
            put 0 into tZahl
            repeat with y = 1000000 down to 225 step - 25
               put y & return after posi
            end repeat
            sort lines of posi numeric
            //speichern
         end if
            posisetzen2
      end posisetzen
      
      ###############################################################################
      ## Die erstellte grp heißt grp ("block"&s). Die Variable s wir immer um 1 erhöht, damit sie alle
      ## einen unterschiedlichen Namen haben. line 1 von posi, wird in oben2 kopiert und bildet den Wert für top.
      ## Damit die nächste line nicht an der gleichen Stelle ist, wird line 1 gelöscht, sodass die nächste
      ## line um 25 erhöht ist. Wenn eine line gelöscht wird, wird der top Wert an posi zurückgegeben und
      ## posi numerisch geordnet. Das funktioniert alles. Nur das Aufrücken nicht. 
      ## // speichern ist nur Platzhalter und kommt noch.
      
      on posisetzen2
         add 1 to s 
         put line 1 of posi into oben2
         delete line 1 of posi
         //speichern
         silberline
      end posisetzen2
      
      // Spalten erstellen
      ###########################################################################
      ## Hier wird die line, inkl. Löschen btn (dele1) erzeugt.
      ## tZahl gibt an wie viele dieser lines existieren. Beim Löschen also auch subtract 1
      ## del2 wird ausgelöst
      
      on silberline
         lock screen
         set the label of btn "Münzen2" to "New Line"
         
         create grp ("block"&s) in grp "GoSi"
         put the short name of grp ("block"&s) of grp "GoSi" & return after grplist
         
         create fld "Nr" in grp ("block"&s) of grp "GoSi"
         set the width of fld "Nr" of grp ("block"&s)  to 30
         set the height of fld "Nr" of grp ("block"&s)  to 25
         set the left of fld "Nr" of grp ("block"&s)  to 53
         set the locktext of fld "Nr" of grp ("block"&s) to true
         
         create fld "edelme" in grp ("block"&s) of grp "GoSi"
         set the width of fld "edelme" of grp ("block"&s)  to 250
         set the height of fld "edelme" of grp ("block"&s)  to 25
         set the left of fld "edelme" of grp ("block"&s) to 83
         
         create fld "kafda" in grp ("block"&s) of grp "GoSi"
         set the width of fld "kafda" of grp ("block"&s)  to 100
         set the height of fld "kafda" of grp ("block"&s)  to 25
         set the left of fld "kafda" of grp ("block"&s)  to 333 
         
         create fld "kafpr" in grp ("block"&s) of grp "GoSi"
         set the width of fld "kafpr" of grp ("block"&s)  to 100
         set the height of fld "kafpr" of grp ("block"&s)  to 25
         set the left of fld "kafpr" of grp ("block"&s)  to 433
         
         create fld "anz" in grp ("block"&s) of grp "GoSi"
         set the width of fld "anz" of grp ("block"&s)  to 100
         set the height of fld "anz" of grp ("block"&s)  to 25
         set the left of fld "anz" of grp ("block"&s)  to 533
         
         create fld "gew" in grp ("block"&s) of grp "GoSi"
         set the width of fld "gew" of grp ("block"&s)  to 100
         set the height of fld "gew" of grp ("block"&s)  to 25
         set the left of fld "gew" of grp ("block"&s)  to 633
         
         create fld "uz1" in grp ("block"&s) of grp "GoSi"
         set the width of fld "uz1" of grp ("block"&s)  to 50
         set the height of fld "uz1" of grp ("block"&s)  to 25
         set the left of fld "uz1" of grp ("block"&s)  to 733
         
         create btn "del1" in grp ("block"&s) of grp "GoSi"
         set the width of btn "del1"  of grp ("block"&s)  to 10
         set the height of btn "del1"  of grp ("block"&s)  to 25
         set the left of btn "del1"  of grp ("block"&s)  to 783
         set the label of btn "del1" of grp ("block"&s) to "x"
         put "global zz, posi" & CR & "on mouseUp" & CR & "put the top of the owner of me & return after posi" & CR & "put the short name of the owner of me into zz" & CR & "del1" & CR & "end mouseUp" into tSkript3
         set the script of btn "del1" of grp ("block"&s)  to tSkript3
         
         set the top of grp ("block"&s) of grp "GoSi" to oben2
         add 1 to tZahl
         del2
         unlock screen
      end silberline
      ##################################################################################
      
      ## del1 öfnet grp dele, wenn der btn "del1" benutzt wird um eine line zu löschen.
      
      on del1
         sort lines of posi numeric
         show grp "dele"
      end del1
      #############################################################################
      ## Der top Wert, der gelöschten line, wird in oben2 kopiert und alle lines, welche einen
      ## höheren Topwert haben, sollen aufrücken. Die anderen liegen ja bereits drüber.
      ## posi wird neu erzeugt und soviele lines of posi gelöscht, wie es grp ("block"&s) gibt
      ## damit es wieder zusammen passt und eine mögliche neue grp genau unter der letzten erzeugt wird.
      
      on del3
         // Höhen anpassen
      repeat tZahl
            if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then
               put the top of grp ("block"&s) into oben3
               set the top of grp ("block"&s) to oben3 -25 
            end if
      end repeat
         put empty into posi
         repeat with y = 1000000 down to 225 step - 25
            put y & return after posi
         end repeat
         sort lines of posi numeric
         delete line 1 to tZahl of posi
      end del3
      ##################################################################################
      ## del2 packt die laufende Nr. in das erste Feld, jeder line bzw. grp ("block"&s)
            
      on del2
         // nummerieren
         put empty into lnr
         if there is a grp ("block"&s) then
            repeat with g = 1 to tZahl
               put g & return  after lnr
            end repeat
            sort lines of lnr numeric
         end if
         if there is a grp ("block"&s) then
            repeat for each line c in lnr
               put line c of lnr into fld "Nr" of grp ("block"&s)
            end repeat
         end if
      end del2

      ##############################################################################
      ## Dies ist das Skript für den btn, mit welchen ich die lines block… erzeugen kann.
      ## Die Auswahl Silber ist das was ich gerade schreibe, Gold, was goldline auslöst
      ## kommt noch, ist aber ähnlich.

      global menue
      on menuPick 
         put the label of btn "münzen2"into menue
         if menue = "Silber" then
            posisetzen
         else
            goldline
         end if
      end menuPick

      #############################################################################
      ## Wenn der btn dele1 betätigt wird, öffnet sich die grp dele. Drückt man auf ok,
      ## wird das o.a. Skript ausgelöst und grp block…. gelöscht.
      ## zz wird gefüllt, wenn man auf dem btn dele1 drückt, druch den Skriptbefehl
      ## put the short name of the owner of me into zz. Wie gesagt das funktioniert auch.
      ## Nur rücken die lines grp block… nicht auf, jedenfalls nicht immer, nur selten.
      ## Drückt man auf Abbrechen wir natürlich nur hide grp „dele“ ausgelöst.
      ## Das steht im btn Abbrechen.

      global oben2,zz, tZahl, grplist
      
      on mouseUp
         put the top of grp zz into oben2
         delete grp zz
         subtract 1 from tZahl
         del3
         del2
         hide grp "dele"
      end mouseUp

      #############################################################

      So das müsste eigentlich alles sein. Ich hoffe es ist vollständig und verständlich.

      Danke schonmal vorab.

      Gruß

      Oliver

    • #27076
      Oliver122
      Teilnehmer

      Eine Sache habe ich noch vergessen. Alle Skripte sind auf der Card, mit Ausnahme der in den beiden btn.
      Das wird bei einem nächsten Programm sicher besser werden. Da wird mehr Skript im Stack sein. Ich Stack befindet sich z.Z. Nur die Speichergeschichte, welche für Card Sparen noch nicht existiert.

    • #27077
      Axwald
      Teilnehmer

      Hallo,

      wenn ich das richtig verstehe, baust Du so eine Art Tabellen-Kalkulation aus einzelnen Text-Feldern (eins pro Zelle)? So etwas habe ich mal angefangen, aber dann aufgegeben weil es schnell viel zu langsam wurde. (Sortieren & Löschen vor allem).
      Ich benutze jetzt ein normales Feld mit „ListBehavior“ & „tabStopps“ (aber OHNE „Basic Table object“ – das ist immer noch verbugt). Damit verzichte ich zwar auf Ausrichten (links, mitte, rechts) innerhalb der Zellen, dafür ist das sehr schnell & problemlos.
      DataGrid passt mir auch nicht, zu umständlich, unflexibel & auch zu träge (IMHO).

      Zu Deinem Problem – ein Rat:
      Versuche, die Daten zu manipulieren, und dann die Darstellung zu erneuern, also:

      1.) Bau Dir ein Skript, das passend zu Deinen Daten die erforderlichen Felder erzeugt, und dann die Daten einsetzt. Dafür eignet sich sehr gut ein „setProp“ Handler in der Gruppe – wenn Du die „cData of this grp“ änderst, löschst Du alle Felder & erzeugst sie neu. Und schreibst die Daten aus cData ‚rein.
      Dieses Skript optimierst Du auf Geschwindigkeit – keine „repeat with i“ mehr, nur „repeat for each“ usw. Mit „Lock/ unlock screen“ geht das recht flott.

      2.) Wenn jetzt eine Zeile gelöscht wird, löschst Du die in einer Variable (= Kopie von cData), und wirfst die geänderte cData einfach zurück in die Gruppe. Selbiges beim Sortieren. Rumms, wird die Darstellung angepasst 🙂

      Am Anfang Deiner setProp („setProp cData theData“, wobei „theData“ = die neuen Daten) prüfst Du, ob theData „empty“ ist (dann löschst Du einfach alle Felder) oder ob „(the number of lines of theData) = (the number of lines of the cData of me)“ ist (dann hat sich die Länge nicht geändert, und Du überschreibst einfach die Zellinhalte).

      Vergiss nicht:
      – Erst „pass cData“ am Ende der setProp schreibt theData in die „cData of me“ (auch wenn Du schon vorher die Felder ausgefüllt hast)!
      – behalte immer mindestens 1 Control (Linie, Rahmen, Hintergrund-Rect …) in der Gruppe – Gruppen ohne Inhalt können verschwinden, auch wenn sie ein Skript haben!

      Noch was:
      Wo Deine Skripte sich befinden ist weitgehend egal. Ich würde das so machen:
      a.) openStack/ preOpenStack: auf der ersten Card. Dann werden sie auch nur beim ersten Start dieses Stacks aufgerufen.
      b.) openCard: davon habe ich oft 2 – im Stack & in der Card. Im Stack für das, was immer passiert (z.B. Datum anzeigen), und in der Card das, was für diese Card spezifisch ist (z.B. Laden der Daten). „pass openCard“ am Ende sorgt dafür, daß das Event weitergereicht wird & die 2te Instanz erreicht.
      c.) Stack Skript: Alles, was auf mehreren Cards gebraucht wird. Und ggf. Stack-Initialisierung.
      d.) Card Skript: Nur das, was spezifisch für diese Card ist.

      Ich hoffe, zur allgemeinen Verwirrung beizutragen gekonnt zu haben 😉
      Viel Spaß!

    • #27078
      Oliver122
      Teilnehmer

      Hallo Axwald,

      danke für deine Hilfe, aber ganz so soll es nicht sein.
      Eine grp Block… besteht aus sieben Feldern und muss auch gelöscht werden. Das erste ist die laufende Nr und alle anderen Können manuell beschrieben werden, zB. Art der Wertanlage, Kaufdatum……
      Wird eine Zeile bzw. Grp gelöscht, wurde diese Wertanlage verkauft.

      Grüße

      Oliver

    • #27092
      Axwald
      Teilnehmer

      Hallo,

      was ich meine ist das:
      Deine _Daten_ sind eine Tabelle. Die _Darstellung_ ist ein Haufen von Feldern.

      Du hast sowieso eine Funktion, die die _Daten_ in die _Darstellung_ übersetzt – sonst könntest Du sie nicht sehen.

      Statt nun, wenn Zeile 3 gelöscht wird, mit großem Aufwand die _Darstellung_ zu ändern (alle Felder in Zeile 3 löschen, alle Zeilen in Zeile 4 – 2.345 jeweils 1 nach oben schieben, evtl. laufende Nummern neu berechnen), kannst Du auch einfach sagen:

      delete line 3 of myData
      drawFields myData

      (wobei „drawFields“ der Handler wäre, der die _Darstellung_ erzeugt, und „myData“ – nun, die Daten)
      Damit sparst Du Dir einen Haufen unnötiger & fehlerträchtiger Coderei.

      So würde ich es jedenfalls machen. Viel Spaß!

    • #27174
      Klaus Major
      Verwalter

      Hi Oliver,

      ich habe leider keine Zeit, das alles nachzubauen.
      Wenn Du magst, darfst Du mir Deinen Stack rüberschicken, dann schaue ich mal drüber.

      Gruß

      Klaus

    • #28177
      Oliver122
      Teilnehmer

      Hallo Klaus,

      es hat etwas länger gedauert, weil ich mich länger damit nicht beschäftigt habe.
      Manche der Befehle kannte ich nicht. Die hätten einiges erleichtert.
      Jetzt funktioniert es sehr gut.

      Bin gerade dabei mich da einzuarbeiten, aber schonmal tausend Dank für deine Hilfe.
      Du hast es echt super gemacht.

      Grüße Oliver

Ansicht von 17 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.