Toon posts:

[Delphi] Soort treeview in datagrid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om in een datagrid een soort van tree view te maken?

Het volgende is het geval

Ik heb een aantal hoofdstappen welke in een datagrid zichtbaar zijn. Sommige van deze hoofdstappen hebben een aantal substappen.

Ik wil dit als volgt weergeven:
Normaal zijn alleen de hoofdstappen zichtbaar. De hoofdstappen die ook substappen hebben hebben een + ervoor staan. Wanneer je dan op het plusje klikt verschijnen de substappen er onder. (Het treeview idee)

Kan dit? en zijn hier voorbeelden van?
Werk met Delphi 7 en Oracle db.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

TDBGrid bedoel je? Nee, dit is niet mogelijk. Je zou via code een TTreeview kunnen vullen of je moet gaan zoeken naar gratis of niet gratis 3rd party componenten bij www.torry.ru

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
OK, dank je..

Wel jammer dat dit zo niet mogelijk is..

Is het niet mogelijk op een zelfde manier als bijvoorbeeld een combobox of checkbox?

Of runtime een met onclick/onselect event een draw event aanroepen die voor elke substap onder de geselecteerde row (hoofdstap) nieuwe rows tekent??

[ Voor 68% gewijzigd door Verwijderd op 28-06-2005 15:38 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 09:25

Tomatoman

Fulltime prutser

Verwijderd schreef op dinsdag 28 juni 2005 @ 15:12:
OK, dank je..

Wel jammer dat dit zo niet mogelijk is..

Is het niet mogelijk op een zelfde manier als bijvoorbeeld een combobox of checkbox?

Of runtime een met onclick/onselect event een draw event aanroepen die voor elke substap onder de geselecteerde row (hoofdstap) nieuwe rows tekent??
Dat hangt ervan af hoeveel tijd je erin wilt steken om het zelf te programmeren. :)

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
Niet super veel tijd :D

Het idee is dat de hoofdstappen alleen zichtbaar zijn en zodra je zo'n hoofdstap aanklikt de daarbij horende substappen er onder komen in dezelfde grid.

Ik hoorde dat dit ook kon met een soort master detail idee.. Met een aantal datasources, maar hoe of wat precies weet ik helaas niet.

  • __fred__
  • Registratie: November 2001
  • Laatst online: 10:22
Hier staan idd wel wat componentjes :)

http://www.torry.ru/pages.php?id=117

  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 00:59

alienfruit

the alien you never expected

Ja, Virtual Treeview werkt perfect!
De component wordt niet voor niks gebruikt in de Delphi 2005 IDE ;)

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Het is alleen wel ff wennen aan dat virtual paradigma. Het zet je als programmeur niet in de meest comfortabele situaties. Maar na een tijdje snap je wel waarom het zo'n blubbervet component is :)

[ Voor 4% gewijzigd door _Thanatos_ op 29-06-2005 23:54 ]

日本!🎌


Verwijderd

Topicstarter
Kiek!

Dank je voor de link.. Zal eens kijken wat ik ermee kan :D

Was zelf al aan het kloten geweest met een dbctrlgrid waar ik onclick at runtime de extra rows aanmaak. Dit werkte al redelijk.

Helaas krijg ik die rows nog niet op de goede hoogte omdat ik niet kan vaststellen welk panel geselecteerd is. Zie wel Panelindex staan, etc. maar weet (nog) niet hoe ik hier gebruik van kan maken.

Stel ik heb 10 hoofdstappen en ik selecteer de 3e hoofdstap, dan worden de substappen alsnog onder de 1e hoofdstap gezet, omdat ik de TOP/positie van de 3e hoofdstap nog niet weet.
Tevens wordt de hoogte van alle panels verhoogt ipv alleen de geselecteerde.

code voorbeeld van een simpel testproggie met 1 button en 1 dbctrlgrid
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.DBCtrlGrid1Click(Sender: TObject);
var iTop, iLeft, i: Integer;
begin
  iLeft:= 20;
  iTop := 17;

// Verwijder alle labels van de control (moet nog bij onpaint event komen.)
    for i := DBCtrlGrid1.ControlCount -1 downto 0 do
    begin
      if DBCtrlGrid1.Controls[i] is TLabel then
      begin
        controls[i].Free;
      end;
    end;
    DBCtrlGrid1.PanelHeight := 18;

  // Open dataset
  if not DataSource2.DataSet.Active then DataSource2.DataSet.Open;
  DataSource2.DataSet.First;
  // Doorloop de dataset
  while not DataSource2.DataSet.Eof do
  begin
    // maak voor elke object in de dataset een label aan
    with TLabel.Create(nil) do
    begin
      parent:= DBCtrlGrid1;
      Caption:= '-- ' + DataSource2.DataSet.FieldByName('OMSCHRIJVING').AsString;
      Left:= iLeft;
      Height := 16;
      Width := parent.Width;
      Top:= iTop;
      Visible := true;

      iTop := iTop + Height;
      // Verhoog de panelhoogte per object dat toegevoegd wordt
      DBCtrlGrid1.PanelHeight := DBCtrlGrid1.PanelHeight + Height;
    end;
    DataSource2.DataSet.Next;
  end;
DataSource2.DataSet.Close;
end;

  • Sh0ckTr00per
  • Registratie: Oktober 2003
  • Laatst online: 05-05 21:30
alienfruit schreef op woensdag 29 juni 2005 @ 17:17:
Ja, Virtual Treeview werkt perfect!
De component wordt niet voor niks gebruikt in de Delphi 2005 IDE ;)
Dat is echt super.. Hier was ik eigenlijk ook al naar op zoek voor een klein Delphi projectje.. _/-\o_
Pagina: 1