Xbpquickbrowse - Arry

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Xbpquickbrowse - Arry

Beitrag von mini990 »

Hallo,
wie der Threadtitel sagt: "Eigentlich ist es mir peinlich..."
Ich habe ein 3-dimesionales Array
aArray := {"a", "b", "c"}, "x", "y", "z"}
aLenFelder:= { "240", "6","20" }
aHeader:= {"Feld1", "Feld2", "Feld3" }
aColWidth:= { 435, 65, 60}
oXbp:= XbpQuickbrowse():new( oXbp0, , {10,80},{580,700} )

Mein Problem ist nun der Datalink
Bei einer Datei als Basis:
oXbp:dataLink := DacPagedDataStore():new( Alias(), aFelder)

Aber wie läuft das Datastore bei einem Array?

Stehe ich heute morgen nur auf dem Schlauch????

Danke im Voraus

Gruß Stefan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Xbpquickbrowse - Arry

Beitrag von brandelh »

Dein Array ist hier nicht dreidimensional, aber warum sollte es das sein ?
Neben deinem Tippfehler liegt wohl ein Missverständnis in der nötigen Anzahl der Dimensionen vor:
:arrow: eine Datentabelle entspricht einem 2 dimensionalen Array :!:

ich stelle mal ein XbpQuickBrowse() Beispiel von einem meiner Programme rein ... alles in Instanzvariablen, aber das ist ja egal

Code: Alles auswählen

   // ich brauche diese Definitionen in verschiedenen Programmteilen, daher in CH Datei ausgelagert !

// Arraybeschreibung von Einkommen: dlgBeaEink          **** immer auch die Zeile LeererDatensatz anpassen
#define SubArray_EK_ID                       1
#define SubArray_EK_Text                     2  // nicht in Datei speichern, sonder immer ber EK_ID laden
#define SubArray_EK_Von                      3  // nur Monat
#define SubArray_EK_Bis                      4  // nur Monat
#define SubArray_EK_BetragVorjahr            5
#define SubArray_EK_BetragAktuell            6  // nur wenn nötig
#define SubArray_EK_BetragZuletztAktuell     7  // bei RAG und Erstmaliger Anpassung hier aktuellen Wert speichern.
#define SubArray_EK_BetragTemp1              8  // Betragsfeld, welches je nach EK Art unterschiedlich verwendet
                                                // werden kann, wenn es n”tig ist.
                                                // Verletzenrente: hier wird Betrag der Verletzten Rente gespeichert
                                                //                 im Monatsbetrag das Ergebnis von VLR - BVG Rente
#define SubArray_EK_EDITZEILE                9  // welche Zeile war vor Sortierung aktiv ?


#define aEinkommen_LeererDatensatz  { "","","","",0,0,0,0,.f.}   // eindimensional, eine Zeile !


   // das steht im INIT(), da sind noch keine Daten im Array, daher wird der Platz nur mit Platzhalter vorbelegt.
   // diese Zeile entspricht diesem Aufruf, wenn man nicht auslagert ...
   // ::aEinkommen   := { { "","","","",0,0,0,0,.f.} }  // 2 Dimensional, mit einem Datensatz !
   // ::aEinkommen   := { { "","","","",0,0,0,0,.f.}, { "","","","",0,0,0,0,.f.} }  // 2 Dimensional, mit zwei Datensätzen !                        
   ::aEinkommen   := { aEinkommen_LeererDatensatz } // was in einem leeren Satz steht, genauso wie der Aufbau sind in CH ausgelagert.

  
   // 
   ::qbEinkommensListe           := XbpQuickBrowse():new( ::gbEinkommensListe, ,;  // owner ist static Element
                                               { 3,3 },;//nRandUnten},;
                                               { ngbEinkommensListeDimX-6,;
                                                    ngbEinkommensListeDimY-nRandUnten*3-2},;  // war vorher auf 4
                                               { { XBP_PP_FGCLR, GRA_CLR_BLACK } } )
   ::qbEinkommensListe:dataArea:referenceArray := {space(30),"     ","     ","     ","     "}  // *** das bestimmt die automatische Spaltenbreite !
   ::qbEinkommensListe:clipParent   := .T.
   ::qbEinkommensListe:clipSiblings := .T.
   ::qbEinkommensListe:tabStop      := .T.
   ::qbEinkommensListe:hScroll      := .F.
   ::qbEinkommensListe:itemSelected := {|| ::EditEKZeile() }

   // das steht im Create()
   ::gbEinkommensListe:create()  // das ist die GroupBox, also der Rahmen und owner
   // DatenArray zuweisen, ::aEinkommen ist hier schon ein passsendes Array (meist leer, da ich ja die Zeilen im Programm hinzufüge)
   ::qbEinkommensListe:datalink     := DacPagedDataStore():new( ::aEinkommen, { SubArray_EK_Text, SubArray_EK_Von, SubArray_EK_Bis, SubArray_EK_BetragVorjahr, SubArray_EK_BetragAktuell } )

   ***** WICHTIG ***** jede Neuzuweisung an ::aEinkommen zerstört diese Beziehung !!!!!
        * Entweder nur asize() und aadd() verwenden oder eine neue DATALINK-Zuweisung wie hier !

   ::qbEinkommensListe:create()
   // nun wird das Aussehen geändert, Methodenaufrufe meist erst nach Create !
   ::qbEinkommensListe:setHeader({"Einkommensart","von","bis","Vorjahr","aktuell"})
   ::qbEinkommensListe:dataArea:SetAlignment(2,XBPALIGN_HCENTER,.f.) // .f. nicht sofort anzeigen, da noch nicht sichtbar
   ::qbEinkommensListe:dataArea:SetAlignment(3,XBPALIGN_HCENTER,.f.)
   ::qbEinkommensListe:dataArea:SetAlignment(4,XBPALIGN_RIGHT,.f.)
   ::qbEinkommensListe:dataArea:SetAlignment(5,XBPALIGN_RIGHT,.f.)

   ::qbEinkommensListe:dataArea:SetColType(1,"C",,,.f.)          // .f. nicht sofort anzeigen, da noch nicht sichtbar
   ::qbEinkommensListe:dataArea:SetColType(2,"C",,,.f.)          // .f. nicht sofort anzeigen, da noch nicht sichtbar
   ::qbEinkommensListe:dataArea:SetColType(3,"C",,,.f.)
   ::qbEinkommensListe:dataArea:SetColType(4,"N",,"@e 999,999.99",.f.)
   ::qbEinkommensListe:dataArea:SetColType(5,"N",,"@e 999,999.99",.f.)

   ::qbEinkommensListe:heading:SetAlignment(2,XBPALIGN_HCENTER,.f.) // .f. nicht sofort anzeigen, da noch nicht sichtbar
   ::qbEinkommensListe:heading:SetAlignment(3,XBPALIGN_HCENTER,.f.)
   ::qbEinkommensListe:heading:SetAlignment(4,XBPALIGN_RIGHT,.f.)
   ::qbEinkommensListe:heading:SetAlignment(5,XBPALIGN_RIGHT,.f.)

*   ::qbEinkommensListe:setColWidth(54,2)   // Von
   ::qbEinkommensListe:setColWidth(58,2)   // Von
   ::qbEinkommensListe:setColWidth(58,3)   // Bis
   ::qbEinkommensListe:setColWidth(74,4)  // Betrag
   ::qbEinkommensListe:setColWidth(74,5)  // VergleichsBetrag

   * jetzt könnte der Browser mit einem Leersatz angezeigt werden, das will ich aber nicht.
   // wenn man eine ausgefüllte Liste bekommt, dann ist das natürlich nicht anzuwenden !
   asize(::aEinkommen,0)
   ::qbEinkommensListe:datalink:refresh()
   ::qbEinkommensListe:refreshAll()


Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Xbpquickbrowse - Arry

Beitrag von brandelh »

Hier noch die Zeilen bei denen die gespeicherten Daten geladen werden (Methode des Hauptfensters):

Code: Alles auswählen

*----------------------------------------------------------------------------- DatenLaden --------------
METHOD __dlgBearbeiten:DatenLaden(lNeuAnlegen) // Parameter .f. ist Daten laden, sonst leere Vorgabe
...
   // Buttons vor erneutem Klicken abstellen
   ::disable()                             // Doppelaufruf verhindern
   ::tpSuchen:pbSuchen:disable()           // Doppelaufruf verhindern
   ::tpSuchen:pbWeiterZu:disable()         // Doppelaufruf verhindern
   ::tpSuchen:pbNeuAnlegen:disable()       // Doppelaufruf verhindern
   ::tpSuchen:pbDatenLaden:disable()       // zuerst doppelter Aufruf verhindern
   // SLE etc. auf Blank setzen
   ::sleZeigZeitraum:setData("")
   ::sleZeigUNR:setData("")
...
   ************** ###########  Keinesfalls anders zurcksetzen !!!! wegen Quickbrowse:datalink!

   asize(::tpEinkommen:aEinkommen , 0)
   ::tpEinkommen:qbEinkommensListe:datalink:refresh()
   ::tpEinkommen:qbEinkommensListe:refreshAll()
...
   // Falls EK Datensätze vorhanden sind, ist der erste nun aktiv
   ************** ###########  Keinesfalls anders zurcksetzen !!!! wegen Quickbrowse:datalink!
   asize(oWin:tpEinkommen:aEinkommen,0)

   do while  EK->AZ == cAZ 

        * Arraystruktur  {  { "EK__01",Func_HI_EK_AB("EK__01",HI_EK_AB_EK_TEXT),"01/2002","03/2002",2600,0 } }
        aadd( oWin:tpEinkommen:aEinkommen , { EK->EK_ID,;
                                                    Func_HI_EK_AB(EK->EK_ID,HI_EK_AB_EK_TEXT),;
                                                    iif(empty(EK->VON), chr(255) ,EK->VON),; // chr(255) ist für mich ein Kennzeichen
                                                    EK->BIS,;
                                                    EK->EK_BETRVOR,;
                                                    EK->EK_BETRAKT,;
                                                    EK->EK_BETLAKT,;
                                                    EK->EK_BETTMP1,;
                                                    .f.  } )

        EK->->(dbskip())

   enddo

   // Sortieren der Datenquelle geht schnell und flexibel
   aSort(oWin:tpEinkommen:aEinkommen,,,{|a,b|a[SubArray_EK_Von]+a[SubArray_EK_Text] <= b[SubArray_EK_Von]+b[SubArray_EK_Text]})
   
   // Datenquelle und Anzeige wieder in Einklang bringen
   oWin:tpEinkommen:qbEinkommensListe:datalink:refresh()
   oWin:tpEinkommen:qbEinkommensListe:refreshAll()

   ....
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Xbpquickbrowse - Arry

Beitrag von mini990 »

Hallo Hubert,
danke.
ich hätte es ja eigentlich wissen müssen.
manchmal steht man so auf dem Schlauch......

Gruß Stefan
Antworten