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
Xbpquickbrowse - Arry
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Xbpquickbrowse - Arry
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:
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
Neben deinem Tippfehler liegt wohl ein Missverständnis in der nötigen Anzahl der Dimensionen vor:
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Xbpquickbrowse - Arry
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 zurcksetzen !!!! 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 zurcksetzen !!!! 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
Hubert
- mini990
- 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
Hallo Hubert,
danke.
ich hätte es ja eigentlich wissen müssen.
manchmal steht man so auf dem Schlauch......
Gruß Stefan
danke.
ich hätte es ja eigentlich wissen müssen.
manchmal steht man so auf dem Schlauch......
Gruß Stefan