Results 1 to 10 of 10

Thread: DBGrid: vertaal integer uit database naar leesbare tekst in grid

  1. #1

    DBGrid: vertaal integer uit database naar leesbare tekst in grid

    Hallo allemaal,

    In een database tabel wordt het geslacht van personen opgeslagen als een integer (1=mannelijk, 2=vrouwelijk). Zodra ik deze tabel zichtbaar maak middels een DBGrid, wil ik natuurlijk niet dat de gebruiker wordt geconfronteerd met deze nietszeggende cijfers. Liever zie ik teksten als 'man' en 'vrouw' in het grid verschijnen.

    Een soortgelijk probleem doet zich voor met een ander veld waarbij ik een boolean (met de waarden true en false) heb gebruikt. Ook hiervoor geldt dat ik in het DBGrid liever een door mij te bepalen tekst laat zien.

    Hoe is dit mogelijk?

    groet,
    Stefan.

  2. #2
    Opslaan als Bool zit er niet meer in neem ik aan?
    Verder kan je een calculated field gebruiken
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Door in je listfield van je tabel / query een nieuw veld als calculated field te creeren. Daarin geef je aan wat er in zal moeten komen te staan. Tevens moet je wel de property calculated fields op true zetten.
    Delphi is great. Lazarus is more powerfull

  4. #4
    jeetje, dat is snel...

    Ik heb het als volgt opgelost:

    Code:
    procedure TFormPersonen.Query1CalcFields(DataSet: TDataSet);
    begin
      If Query1.FieldByName('Geslacht').AsInteger = 1 then 
        Query1.FieldByName('GeslachtCalc').AsString := 'man'
      else
        Query1.FieldByName('GeslachtCalc').AsString := 'vrouw';
    end;
    Het was mij niet bekend dat dit mogelijk was middels CalculatedFields... Weer iets moois bijgeleerd vandaag!

    Beiden bedankt voor jullie reactie!

  5. #5
    Als je alleen maar een veld anders wilt tonen dan het in de dataset staat kun je dat ook met het OnGetText event van dat veld oplossen. Zie: OnGetText.
    Marcel

  6. #6
    senior member PeterVercruysse's Avatar
    Join Date
    Nov 2006
    Location
    Rijsel
    Posts
    1,608
    Als je het enkel en alleen in je DbGrid wil, kun je het ook nog doen met de TDbGrid.OnDrawColumnCell, maar dat is niet de beste oplossing.

    Hoe dan ook, als je het veld wilt editeren rechtstreeks in je grid zit je met een probleem.
    Gelukkig zijn er daar ook oplossingen voor.
    Gras groeit niet sneller door er aan te trekken

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Hoe dan ook, als je het veld wilt editeren rechtstreeks in je grid zit je met een probleem.
    Gelukkig zijn er daar ook oplossingen voor.
    En die zijn?
    Delphi is great. Lazarus is more powerfull

  8. #8
    In het geval van de oplossing aan de UI kant: geen idee

    In het geval van het GetText event: het SetText event van datzelfde TField. Als je in je GetText een als 1 dan 'man' constructie had staan zet je in hetSetText event een als 'man' dan 1 constructie.
    Marcel

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    OnGetText werkt als een trein, Marcel (in mijn situatie dan). Wat je wel moet weten, is waar de OnGetText event staat. Je moet dan wel een Fieldlist hebben, om dat event te kunnen selecteren.
    Delphi is great. Lazarus is more powerfull

  10. #10
    Dat klopt. Om events van een Field te gebruiken moet je deze als persistent fields aanmaken in je fields editor. Om die te openen dubbelklik of klik je rechts je op je DataSet. Als je dan je velden hebt toegevoegd werken deze net als andere objecten in je object inspector.

    Je kunt ze natuurlijk ook runtime koppelen maar dat is alleen in uitzonderlijke gevallen handig.

    Je hebt gelijk, goeie aanvulling.
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •