AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Virtualstringtree suchen mit Child-Nodes

Ein Thema von HPB · begonnen am 11. Okt 2013 · letzter Beitrag vom 16. Mär 2016
 
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Virtualstringtree suchen mit Child-Nodes

  Alt 11. Okt 2013, 11:20
Guten Tag Delphianer,
folgendes Problem mit der Suche im Virtualstringtree bekomme ich nicht gelöst:
Beim Suchen werden werden die Child-Nodes nicht mehr angezeigt.
Der Aufbau ist Ordnung. Es werden die Nodes auch richtig aufgebaut. D. H. Parent-Node und Child-Node werden korrekt angezeigt.Beim Expand der Nodes werden die Child-Nodes auch richtig angezeigt.
---------------------------------------------------------------------------------------


Die beiden Records aus denen das VST aufgebaut wird.
Delphi-Quellcode:
  TOVSTAngebote = class(TObject)
  public
    FPKAngebotsNr: string;
    FAngebotstitel: string;
    FKuSuchCode: string;
    FKundenNr: string;
    FAdressID: LongInt;
    FSuchCode: string;
    FName: string;
    FAGGedruckt: string;
    FKostenStelle: string;
    FfNetto: Currency;
    FfMwst: Currency;
    FfBrutto: Currency;
    FDatum: TDateTime;
    FPauschal: string;
    FfPauschalPreis: Currency;
    FfMenge: double;
    FAbgerechnet: string;
  end;

  //============================================================================
  // Dokumentenklasse für Angebote Anzeige im VST
  //============================================================================
  TOAngeboteDokumente = class(TOVSTAngebote)
  public
    FDokumentName: string;
    FAdressOrdner: string;
    FDokumentWert: Currency;
    FDokumentDatum: TDateTime;
    FDokumentNr: string;
  end;
---------------------------------------------------------
Delphi-Quellcode:
procedure TOVSTFuerAngeboteAufbauen.BauVSTAuf;
var
  aAngebotsNr: string;
  pKostenstelle: string;
  pDokumentPfadName: string;
  pDokumentName: string;

  pNode1: PVirtualNode;

  pSQLDok: TIBSQL;

  angebote: TOVSTAngebote;
  pDokumente: TOAngeboteDokumente;
begin
  dmain.pStartTransAction;
  FVST.BeginUpdate;
  FVST.Clear;

  Application.CreateForm(TIBSQL, pSQLDok);

  pSQLDok.Database := DMAIN.dbmain;
  pSQLDok.Transaction := DMAIN.tranmain;

  FSQLA.Close;
  FSQLA.SQL.Clear;
  FSQLA.SQL.Add('select * from Angebote ');
  FSQLA.SQL.Add('where abgerechnet = :pAbgerechnet ');
  FSQLA.SQL.Add('and geloescht = ' + #39 + 'N' + #39);
  FSQLA.SQL.Add('and fkadressid = :pAdressID ');
  FSQLA.SQL.Add(' order by titel');
  FSQLA.Prepare;
  FSQLA.ParamByName('pAbgerechnet').Value := FAlleZeigen;
  FSQLA.ParamByName('pAdressid').Value := FAdressID;
  FSQLA.ExecQuery;

  while not FSQLA.Eof do
  begin
    aAngebotsNr := FSQLA.FieldByName('pkAngebote').AsString;
    pKostenstelle := FSQLA.FieldByName('kostenstelle').AsString;

    angebote := TOVSTAngebote.Create;
    angebote.FPKAngebotsNr := FSQLA.FieldByName('pkAngebote').AsString;
    angebote.FAngebotstitel := FSQLA.FieldByName('titel').AsString;
    angebote.FAdressID := FSQLA.FieldByName('fkadressid').AsInt64;
    angebote.FSuchCode := FSQLA.FieldByName('suchcode').AsString;
    angebote.FName := FSQLA.FieldByName('ReName').AsString;
    angebote.FfNetto := FSQLA.FieldByName('angebotnettosumme').AsFloat;
    angebote.FfMwst := FSQLA.FieldByName('mwstbetrag').AsFloat;
    angebote.FfBrutto := FSQLA.FieldByName('bruttobetrag').AsFloat;
    angebote.FDatum := FSQLA.FieldByName('datum').AsDateTime;
    angebote.FKostenStelle := FSQLA.FieldByName('kostenstelle').AsString;
    angebote.FAbgerechnet := FSQLA.FieldByName('abgerechnet').AsString;

    pNode1 := FVST.AddChild(nil, angebote);

    if pKostenstelle <> 'then
    begin
      pSQLDok.Close;
      pSQLDok.SQL.Clear;
      pSQLDok.SQL.Add('select * from alledokumente ');
      pSQLDok.SQL.Add('where fkadressid = :pAdressID ');
      pSQLDok.SQL.Add('and kostenstelle = :pKostenStelle');
      pSQLDok.SQL.Add('order by dokumenttyp ');
      pSQLDok.Prepare;
      pSQLDok.ParamByName('pAdressID').Value := FAdressID;
      pSQLDok.ParamByName('pKostenStelle').Value := pKostenstelle;
      pSQLDok.ExecQuery;
      while not pSQLDok.Eof do
      begin
        pDokumentPfadName := pSQLDok.FieldByName('dokumentPfad').AsString;
        pDokumentName := pSQLDok.FieldByName('dokumentName').AsString;

        pDokumente := TOAngeboteDokumente.Create;
        pDokumente.FDokumentName := pDokumentName;
        pDokumente.FAdressOrdner := IntToStr(FAdressID);
        pDokumente.FDokumentWert :=
          pSQLDok.FieldByName('rebetrag').AsCurrency;
        pDokumente.FDokumentDatum :=
          pSQLDok.FieldByName('dokumentdatum').AsDateTime;
        pDokumente.FDokumentNr := pSQLDok.FieldByName('dokumentnr').AsString;
       
        FVST.AddChild(pNode1, pDokumente);

        pSQLDok.Next;
      end;
    end;
    FSQLA.Next;
  end; // alle angebote

  pSQLDok.Close;
  pSQLDok.Free;
  FSQLA.Close;
  FSQLA.Free;
  FVST.EndUpdate;
  dmain.tranmain.CommitRetaining;
end;
--------------------------------------------------------------------------

Aufbau des VST:
Delphi-Quellcode:
procedure TMSFrmAngebote.vstAngeboteGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
var
  pDaten: TOVSTAngebote;
begin
  pDaten := TOVSTAngebote(vstangebote.GetNodeData(Node)^);
  case column of
    0:
      begin
        if pDaten is TOVSTAngebote then
          celltext := TOVSTAngebote(pDaten).FAngebotstitel
            + ' (' + TOVSTAngebote(pDaten).FPKAngebotsNr + ')';

        if pDaten is TOAngeboteDokumente then
          CellText := TOAngeboteDokumente(pDaten).FDokumentName;
      end;
    1:
      begin
        if pDaten is TOVSTAngebote then
          CellText := TOVSTAngebote(pDaten).FSuchCode;
      end;
    2:
      begin
        if pDaten is TOVSTAngebote then
          celltext := FormatDatetime('dd.mm.yyyy',
            TOVSTAngebote(pDaten).FDatum);
        if pDaten is TOAngeboteDokumente then
        begin
          pJahr := ZerlegeJahr(TOAngeboteDokumente(pDaten).FDokumentDatum);
          if pJahr <> 1899 then
            CellText := FormatDatetime('dd.mm.yyyy',
              TOAngeboteDokumente(pDaten).FDokumentDatum);
        end;
      end;
    3:
      begin
        if pDaten is TOVSTAngebote then
          Celltext := FloatToStrF(TOVSTAngebote(pDaten).FfBrutto, ffCurrency, 8,
            2);
        if pDaten is TOAngeboteDokumente then
          CellText := FloatToStrF(TOAngeboteDokumente(pDaten).FDokumentWert,
            ffCurrency, 8, 2);
      end;
  end;
end;
------------------------------------------------------------------------------
Gesucht wird über ItereeSubTree, über das OnChange-Ereignis eines Editfeldes.
Die gefundenen Nodes werden angezeigt. Die Parent-Nodes haben auch ein Pluszeichen für das Aufklappen,
aber beim Klick auf das Pluszeichen sind die Child-Daten nicht vorhanden!
Warum nicht???

Delphi-Quellcode:
procedure TMSFrmAngebote.SucheCallback(Sender: TBaseVirtualtree;
  Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  cSuche: string;
  pDaten: TOVSTAngebote;
begin
  cSuche := AnsiUpperCase(edtSuche.Text);
  pDaten := TOVSTAngebote(vstangebote.GetNodeData(Node)^);

  case AdvOfficeRadioGroupSuchenach.ItemIndex of
    0:
      begin
        vstangebote.IsVisible[Node] := (cSuche = '')
          or (pos(cSuche,
          AnsiUpperCase(pDaten.FAngebotstitel)) > 0);
      end;
    1:
      begin
        vstangebote.IsVisible[Node] := (cSuche = '')
          or (pos(cSuche, pDaten.FSuchCode) > 0);
      end;
  end;
end;
---------------------------------------------------
Hat jemand eine Lösung für dieses Problem? Wie kann ich dieses Problem lösen??
Mit Gruß
HPB
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz