Results 1 to 5 of 5

Thread: Selecties in TjvDBTreeview

  1. #1
    John van Dijk
    Join Date
    Aug 2006
    Location
    Belfeld
    Posts
    44

    Question Selecties in TjvDBTreeview

    Hallo,

    Ik zit met het volgende probleem:

    Ik maak gebruik van TjvDBTreeView, werkt prima, maar nu wil ik meerdere items selecteren, en van deze selectie wil ik de bijbehorende record ID (=master field) weten.

    Voor het selecteren zet ik de state value op 1, hierdoor verschijnt in de treeview een vinkje voor het geselecteerde record.
    Het uitfilteren van de geselecteerde records heb ik ook al uitgevogeld, maar nu weet ik niet hoe ik aan het bijbehorende record ID kan komen.

    Code voor uitfilteren geselecteerde items:
    Code:
    procedure TfrmMachineConfig.ShowAllTreeItems;
    var
      CurItem: TTreeNode;
    begin
      frmDummy.tvDummy.Items.BeginUpdate;
      frmDummy.tvDummy.Items.Assign( tvCodeLib.Items );
      frmDummy.tvDummy.Items.EndUpdate;
      frmDummy.tvDummy.FullExpand;
    
      frmSelectie.memResult.Lines.Clear;
      CurItem := frmDummy.tvDummy.Items.GetFirstNode;
      while CurItem <> nil do
      begin
        if CurItem.StateIndex > 0 then
        begin
          frmSelectie.memResult.Lines.Add(CurItem.Text+' ' );
        end;
        CurItem := CurItem.GetNext;
      end;
    end;
    Iemand een idee?

    gr. John van Dijk

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,643
    Wat ik uit jou code haal, is dat je een TjvDBTreeview kopieert naar een frmDummy.tvDummy.Items. Dus alleen items zijn bekend welke geen referentie meer hebben van de dataset.
    * bron stackoverflow
    Delphi Code:
    1. var  Node: TTreeNode;
    2. Node := TreeView.Items.GetFirstNode;
    3. while Node <> nil do
    4.   begin
    5.     if Node.Selected then
    6.     begin
    7.        //zoek naar een record in de dataset en geef de id terug.
    8.     end;
    9.     Node := Node.GetNextSibling;
    10. end;
    Zelf maak ik gebruik van een standaard Treeview en sla de id op als een pointer in node.data.
    Daardoor kan ik meteen naar een record in mijn dataset als ik een node heb geselecteerd.
    Dit is een voorbeeld, die ik gebruik in Lazarus (maar werkt net zo goed in Delphi)
    Delphi Code:
    1. procedure TMyStart.FillTonode(SQLQuery : TSQLQuery);
    2. var node           : TTreenode;
    3.     newnode        : TTreenode;
    4.     Achternaam     : string;
    5.     Tussenvoegsels : string;
    6.     Voornaam       : string;
    7. begin
    8.   Achternaam := SQLQuery.FieldByName('achternaam').AsString;
    9.   node := GetNodeByText(copy(Achternaam,1,1));
    10.   if node <> nil then
    11.   begin
    12.     if SQLQuery.FieldByName('tussenvoegsels').IsNull then
    13.       Tussenvoegsels := ''
    14.     else
    15.       Tussenvoegsels := SQLQuery.FieldByName('tussenvoegsels').AsString;
    16.     Voornaam := SQLQuery.FieldByName('voornaam').AsString;
    17.     FFullName := Achternaam + ', ' + Voornaam;
    18.     if trim(Tussenvoegsels) <> '' then
    19.       FFullName := FFullName + ' ' + Tussenvoegsels;
    20.     newnode := FDBTreeView.Items.AddChild(Node, FFullName);
    21.     newnode.Data:= pointer(SQLQuery.FieldByName('ID').AsInteger);
    22.   end;
    23. end;
    Of virtualtreeview gebruiken
    Delphi is great. Lazarus is more powerfull

  3. #3
    John van Dijk
    Join Date
    Aug 2006
    Location
    Belfeld
    Posts
    44

    TjvDBTreeView

    De reden dat ik een dummy gebruik, is dat ik de treeview eerst een full expand moet geven, voordat ik bij alle items de state kan gaan afvragen.
    Omdat ik dat niet visueel wil laten merken, gebruik ik de dummy.

    Het is lastig dat de TJvDBTreeview geen record ID opslaat in de treeview zelf.
    Ik kan heel gemakkelijk het ID opvragen uit de gekoppelde database tabel, maar dan moet er eerst een tv-item zijn geselecteerd.
    Ik wou het eigenlijk zo maken dat als je een item selecteert, ook automatisch alle onderliggende items worden geselecteerd.
    Die code heb ik al klaar, echter wordt dan alleen de state waarde in de treeview aangepast.
    Ik kan dan nog steeds niet de bijbehorende record ID's opvragen.

    Ondertussen heb ik de code aangepast zodat je maar één record tegelijkertijd kan selecteren, zodat ik dan meteen het bijbehorende ID verwerk, maar dat is meer een tussenoplossing.

    De vraag wordt dan eigenlijk: hoe kan ik het record ID opslaan in een TjvDBTreeView?
    Om de treeview zelf vanuit de database te vullen, zal me nogal wat werk gaan kosten, ik vond de component juist erg gemakkelijk werken, totdat ik tegen dit probleem aanliep....

    Kan virtualtreeview ook automatisch vanuit een database worden gevuld?

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,643
    Het zal mij niet verbazen dat TjvDBTreeview ook een .data property heeft om extra gegevens op te slaan.
    Maar is dit component niet gekoppeld aan een dataset. Dan moet er toch een property zijn, die de pointer opslaat van het record, waardoor deze makkelijk is uit te lezen.
    Om de treeview zelf vanuit de database te vullen, zal me nogal wat werk gaan kosten
    Dat valt wel mee. Die code staat al hier bovenaan
    ik vond de component juist erg gemakkelijk werken
    Het tegenovergestelde. Ik ben daar een aantal uurtjes mee bezig geweest en kreeg het niet aan de praat zoals ik het wilde. Van daar ik het heft zelf in handen heb genomen.
    Kan virtualtreeview ook automatisch vanuit een database worden gevuld?
    Kijk even op de site . Mensen op dit forum zijn erg tevreden met die tool en ja het kan ook lezen vanuit een dataset.
    Delphi is great. Lazarus is more powerfull

  5. #5
    John van Dijk
    Join Date
    Aug 2006
    Location
    Belfeld
    Posts
    44
    Bedankt voor de info, John.
    Ik zal er eens wat dieper in duiken.
    Ik ga in ieder geval virtualtreeview eens uitproberen.
    gr. John van Dijk

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
  •