Einzelne Zeile in einem DBGrid färben



  • Hallo alle zusammen,

    wie kann ich eine einzelne Zeile in einem DBGrid einfärben ?
    Geht das überhaupt ?

    Zum Verständniss:
    Artikeldatenbank in einem DBGrid. Der IST Bestand ist kleiner als 0.
    Dann soll nur diese Zeile mit dem Artikel eingefärbt werden.

    Danke im voraus

    Sascha



  • Das funktioniert prinzipiell genauso wie beim StringGrid (siehe FAQ).



  • Hallo,

    laut FAQ müsste das ja in etwa so aussehen:

    if (myq_art->FieldByName("bestand_ist") < 0)
     {
     dbg_art->Canvas->Brush->Color = clRed;
     }
    

    myq_art = Query
    dbg_art = DBGrid

    Funktioniert aber nicht.

    Tut mir leid wenn ich mich zu doof anstelle 🙂



  • [cpp]
    if (myq_art->FieldByName("bestand_ist")->AsInteger < 0)
    {
    dbg_art->Canvas->Brush->Color = clRed;
    }
    [/cpp]



  • Du musst den in OnDrawDataCell übergebenen Field-Parameter auswerten.

    if (Field->FieldName == "bestand_ist" && Field->AsInteger < 0)
    ...
    

    Ungetestet.



  • ach noch eine doofe frage hinterher

    wie kann ein bestand den weniger als 0 sein ?
    entweder es ist was auf lager > 0, oder es ist nix da, also 0 😮

    aber minus werte ?? 🙄



  • @helper: DAS ist ein leidiges Thema. Auch in unserem APS-System lassen wir negative Lagerbestände zu, damit z.B. bei so gerade eben rechtzeitig fertig gestellten Aufträgen, die Ware versendet werden kann (Lieferscheindruck usw), ohne, dass erst die ganze Rückmeldeprozedur durchlaufen werden muss.



  • me = Sascha 😃

    Vorab negative Bestände bedeuten auch gleichzeitig Vorbestellungen.
    Und das ist leider heut zu Tage üblich Artikel auch zu verkaufen
    wenn noch keine Ware da ist 😃

    Es haut immernoch nicht hin 😞

    Wenn ich das so mache wie helper das gesagt hat, bekomme ich die Meldung das das Feld Artikelnummer (was auch im Grid ist) kein Integer ist.

    Wenn ich das so mache wie Jansen gesagt hat, bekomme ich die Meldung das FieldName ein unbekannter Bezeichner ist.



  • Es muss Field->FieldName heissen, siehe meinen korrigierten Beitrag.



  • Ich bin euch echt dankbar, aber es funktioniert immernoch nicht.
    Ich bekomme aber keine Fehlermeldung.

    Ist in der Canvas Funktion vielleicht was falsch.

    if (Field->FieldName == "IST" && Field->AsInteger  < 0)
    {
    dbg_art->Color = clRed;
    }
    else
    {
    dbg_art->Color = clCream;
    }
    

    So funktioniert das. Das ist aber nicht so gut, da die Schleife andauernd durchläuft und er nur die erste Spalte einfärbt.



  • "Funktioniert nicht" ist reichlich dürftig.
    Hast du schon mal den Debugger angeworfen und dir z.B. zur Laufzeit die Variableninhalte angesehen?


Anmelden zum Antworten