2016-04-20 11 views
0

Eine andere Frage, die die De-Texel-Treelisten betrifft. Es ist mir gelungen, ein cxgrid zu erhalten, um Zeilen basierend auf einem im Raster gespeicherten Wert zu färben. Meine Versuche, dieses Wissen in den Baumstamm zu übertragen, sind nicht gut verlaufen. Ich habe derzeit das gesamte Raster gefärbt und die Kinder Knoten sind als Standard (schwarzer Text auf weißem Hintergrund).Wie würde ich eine Farbe auf untergeordnete Knoten nur für TcxTreelists anwenden?

Ich denke, das Problem ist in Bezug auf, wann und wie Kinder Knoten bevölkert sind. Momentan werden sie dynamisch ausgefüllt und gelöscht, wenn sich die Auswahl ändert.

var 
LNode : TcxTreeListNode; 
LListData : TOfferList; 
LSiteData : TSiteList; 
LContract : TItem; 
begin 
    LNode := TreeTypes.FocusedNode; 
    if Assigned(LNode) then 
    begin 
    if LNode.Level = 0 then 
    begin 
     LNode.DeleteChildren; //clear children so that list doesnt get duplicate entries/children 
     LSiteData := TSiteList(LNode.Data); //root node info 
     PopulateOfferList; //populate children list with data from DB 
     InitialiseOffers; // populate treelist with children gathered from the list above 
     LNode.Expand(True); 
    end 
    else 
    begin 
    LListData := TOfferList(LNode.Data); //do stuff with selected child node 
    LContract := TItem.Create(LListData.UnitID);//do stuff with selected child node 
    end; 
    end; 
end; 

So wie es aussieht, funktioniert es gut. Ich kann tun, was ich mit all den Informationen machen muss. Die gesamte Liste ist jedoch schwarz und weiß. Um Unterschiede in untergeordneten Knoten zu erkennen, möchte ich, dass sie basierend auf Informationen, die während des Populationsprozesses erfasst werden (DB-Objekte), eingefärbt werden.

Der aktuelle individuelle Draw:

procedure TFrmTestView1.TreeTypesCustomDrawDataCell(Sender: TcxCustomTreeList; 
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo; 
var ADone: Boolean); 
var 
    LState : TStates; 
    LOffer : TOfferList; 
begin 
    if (Assigned(AViewInfo)) and (Assigned(AViewInfo.Node)) then 
    begin 
    if AViewInfo.Node.Level > 0 then 
    begin 
     LOffer := AViewInfo.Node.Data; 
     LState := FGlobals.GetStateFromID(LOffer.StateID); 
    end; 
    end; 

    if AViewInfo.Node.Level > 0 then 
    begin 
    if Assigned(LState) then 
    begin 
     ACanvas.Brush.Color := LState.Background; 
     ACanvas.Font.Color := LState.Foreground; 
    end; 
    end; 

Dies verursacht Zugriffsverletzungen, wenn Parent (root) Knoten zu ändern und keine der Kinderknoten Färbung. Ich habe versucht, ein Tree.FullRefresh auf nodelselectionchange -Ereignis hinzuzufügen, und das schien keine Wirkung zu haben.

Ich möchte nur in der Lage sein, die Hintergrund- und Textfarben abhängig von den im Knoten gespeicherten Daten zu ändern. Mit den Elternknoten, die in Schwarz-Weiß- und Kinderknoten erscheinen, wird eine ganze Reihe von Farben angezeigt.

Danke,

noch Fragen oder Eingabeaufforderung für Sachen, die ich verpasst haben, würde ich mehr als glücklich sein, hinzuzufügen. Hinweis: Ich füge untergeordnete Knoten mithilfe der Node.AddChild-Prozedur hinzu.

Edit: Denke, ich habe die Methodensignatur hinzugefügt, nie gehört, dass es so genannt wird, also ist das eine Terminologie, die ich von meiner Liste abhaken kann.

+1

Haben Sie DevExpress-Support kontaktiert? sie antworten normalerweise sehr schnell – Zam

+0

Mögliches Duplikat von [DX TreeList - Wie man Farbe von irgendeinem Knoten ändert] (http://stackoverflow.com/questions/2341662/dx-treelist-how-to-chango-color-of-some- node) –

+0

@TomBrunberg Ich habe mir diesen Post angesehen, konnte aber kein 'NodeCellStyle'-Event finden und als ich versuchte, auf den Link zu gehen, konnte ich keine Verbindung zur Website herstellen. Zam habe ich noch nicht, ich warte auf eine sehr langsame E-Mail in Bezug auf die Erstellung eines Accounts (wird mein Exchange-Server sein), dachte aber, während ich auf die E-Mail warte, wenn ich meine Frage da draußen bekommen könnte. Als temporäre 'Reparatur' verwende ich die CxStyles, aber alle Farbinformationen, die ich verwenden möchte, werden als Integer in der Datenbank gespeichert. Wenn sich dies als Duplikat herausstellt, bitte ich um Entschuldigung und lösche diese Frage. – Edward

Antwort

0

Das Konto von Expexpress wurde endlich eingerichtet!

Die Antwort ist von ihnen, aber ich dachte, ich würde es hier veröffentlichen, sollte jemand danach suchen. Stellt sich heraus, ich bin ein Idiot

var 
    LState : TStates; 
    LOffer : TOfferList; 
begin 
    if AViewInfo.Node.Level > 0 then 
    begin 
    LOffer := TOfferList(AViewInfo.Node.Data); 
    LState := FGlobals.GetStateFromTag(LOffer.StateTag); 
    ACanvas.Brush.Color := LState.Background; //integer stored in db 
    ACanvas.Font.Color := LState.Foreground; //integer stored in db 
    end; 
end; 

Stellt sich heraus, ich habe versucht, es zu overcomplecate durch das Verfahren in die ‚Sammlung von Daten‘ Aufspaltung dann Leinwand anwenden. Indem wir es zusammenhalten, funktioniert es. Für Hinweis auf zukünftige mich KISS (Keep it simple doof) !.

Entschuldigung für die Verschwendung Ihrer Zeit Jungs. Fühlen Sie sich, als ob ich versucht habe, das Problem zu erschweren, als es jemals hätte sein sollen.