Results 1 to 6 of 6

Thread: DBGrid: goede waarden tonen

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    DBGrid: goede waarden tonen

    Ik heb gemerkt dat heel veel DBGrid met checkboxes alleen kijken of een veld boolean is of niet. Dat kan heel nadelig zijn als je een database hebt, waarin de checkbox een char is en de waarde 'J' of 'N' hebt. DBCheckbox doet het goed, in de grid heb je deze aanpassing nodig om de juiste waarde te tonen
    delphi Code:
    1. procedure TCheckDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    2.   const CtrlState :array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
    3. var blWaarde : boolean;
    4. begin
    5.   inherited;
    6.   if TCheckColumn(Column).Check then
    7.   begin
    8.     BlWaarde := Column.Field.AsBoolean;
    9.     if not BlWaarde then
    10.     begin
    11.       //check of er een een andere waarde is
    12.       if Column.Field.AsString = TCheckColumn(Columns[SelectedIndex]).FValueChecked then
    13.         BlWaarde := true else
    14.       if Column.Field.AsString = TCheckColumn(Columns[SelectedIndex]).FValueUnChecked then
    15.         BlWaarde := false else
    16.         BlWaarde := false;
    17.       end;
    18.     Canvas.FillRect(Rect);
    19.     DrawFrameControl(Canvas.Handle,Rect,DFC_BUTTON,CtrlState[blwaarde]);
    20.    end;
    21.  end;
    Dit werkt ten dele. De waarden worden alleen getoond als je erop staat. In alle andere gevallen is het blanco. Ik doe dus iets fout. Maar wat.

    In mijn bijlage zit de grid (niet van mij zelf), waarin ik die aanpassing hebt gedaan.
    Attached Files Attached Files
    Delphi is great. Lazarus is more powerfull

  2. #2
    Waarom sla je de hele routine over als BlWaarde False is? Is dat de bedoeling?
    Marcel

  3. #3
    Nee, juist als ie True is.
    1+1=b

  4. #4
    of zo:

    Delphi Code:
    1. BlWaarde:= TCheckColumn(Columns[SelectedIndex]).FValueChecked;

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dit is de oplossing
    Code:
      if TCheckColumn(Column).Check then
      begin
        BlWaarde := Column.Field.AsBoolean;
        if not BlWaarde then
        begin
          //check of er een een andere waarde is
          if Column.Field.AsString = TCheckColumn(Columns[column.Index]).FValueChecked then
            BlWaarde := true else
          if Column.Field.AsString = TCheckColumn(Columns[column.Index]).FValueUnChecked then
            BlWaarde := false else
            BlWaarde := false;
          end;
        Canvas.FillRect(Rect);
        DrawFrameControl(Canvas.Handle,Rect,DFC_BUTTON,CtrlState[blwaarde]);
      end;
    Blijkbaar wordt de property selectedindex niet goed aangeroepen bij een OnDraw event van de grid. Omdat selectedindex telkens de waarde 0 gaf, werd niet de goede waarde getoond en werd blwaarde altijd false, tot op het moment dat er op die cell werd geklikt.

    @Handseame
    Dat kan niet, want BlWaarde is een boolean type en FValueChecked is een string type.
    Delphi is great. Lazarus is more powerfull

  6. #6
    dan is het waarschijnlijk zo iets:

    BlWaarde:= (Column.Field.AsString = TCheckColumn(Columns[column.Index]).FValueChecked );

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
  •