Avatar billede skindbeni Nybegynder
02. december 2007 - 21:18 Der er 7 kommentarer og
1 løsning

Kan et felt i database vises som 2 kolonner i DBGrid

Jeg henter data til en DBGrid

(Database => Transaction => Query => DatasetProvider => ClientDataSet => Datasource)

I databasen er der et felt, lad os kalde det TESTFELT, der indeholder både positive og negative tal.

Er det muligt, enten i DBGrid'en eller ClientDataSet'et at lave det således, at DBGrid'en visuelt har 2 kolonner for TESTFELT: En kolonne for positive værdier og en kolonne for negative værdier.

Fx.
Databasen
ID Testfelt
1      10,0
2    -  3,0
3    397,0
4      0,0
5    -  0,5

Skal i DBGrid vises således
ID Positiv Negativ
1      10
2                3
3      397
4
5              0,5
Avatar billede martinlind Nybegynder
02. december 2007 - 21:37 #1
du kan lave 2 calulatedfield i cds det er vist ikke være så svært og så klare det med dem.
Avatar billede skindbeni Nybegynder
02. december 2007 - 21:48 #2
Jep. Var også mit forsøg.

Jeg famler dog i blinde, måske ligger det lige for næsen af mig, og jeg stirrer bare for langt?

Jeg skal sætte en expression op eller sådan noget?
Avatar billede martinlind Nybegynder
03. december 2007 - 10:03 #3
Den har vist nok en oncalcfield event, ellers så prøv at kigge i demos, mon ikke der er en demo der bruger calculatedfields
Avatar billede skindbeni Nybegynder
03. december 2007 - 17:46 #4
Jeg dropper det og laver i stedet 2 felter i databasen. En for negative og en for positive tal.
Avatar billede hrc Mester
04. december 2007 - 00:02 #5
Det er spild af plads at lave et felt for hhv. positive og negative tal. Du kan bruge OnCalcField til at styre det med.

Sæt gridden DefaultDrawing til false. Dobbeltklik dernæst på den og tilføj tal-feltet to gange - i hver sin kolonne. Indsæt dernæst følgende kode i griddens OnDrawColumnCell-event. Derefter skulle det virke:

procedure TfrmMain.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Vaerdi: integer;
begin
  with Sender as TDBGrid do
  begin
    if DataCol in [1,2] then
    begin
      Vaerdi := DataSource.DataSet.FieldByName('tal').Value;
      case DataCol of
        1: if Vaerdi >= 0 then
            DefaultDrawColumnCell(Rect,DataCol,Column,State);
        2: if Vaerdi < 0 then
            DefaultDrawColumnCell(Rect,DataCol,Column,State);
      end;
    end
    else
      DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;
Avatar billede hrc Mester
04. december 2007 - 00:03 #6
Nåe ja. Du behøver ikke bruge OnCalcField. Glemte at fjerne det.
Avatar billede hrc Mester
04. december 2007 - 00:05 #7
Der er et link til about.com her: http://delphi.about.com/od/usedbvcl/l/aa031699.htm.

Har ikke tjekket hvad der sker med de felter der ikke tegnes op - hvis der står noget i feltet kan det være det bliver stående. Så må man blanke feltet, evt bare sætte farven på tegnene til den samme som baggrunden
Avatar billede skindbeni Nybegynder
04. december 2007 - 18:19 #8
Hej hrc.

Endnu engang har du svarene.

Point til dig her:
http://www.eksperten.dk/spm/808902
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester