|
Sections below here:
Topics in this section:
Property UserData
Property CSS
Event OnPlusMinus
Property DoServerSidePlusMinus
ScrollToName
TIWTreeViewItems.Add
Code Samples
|
This is a snipet of code you can use to load data to your IWTreeView. Here we show a pratical example on how to change the CSS, the Hint and the Node image for the TreeNode. procedure TfrmTreeView.FillTreeView(const TreeView: TIWTreeView; const Node: TIWTreeViewItem; const Dataset: TDataset; const Field, KeyField, CSSField: String; const Hint: String; FakeNode: Boolean; NodeLevel: Integer; ClearNode: Boolean; CheckCrazyOffer: Boolean); var TreeNode: TIWTreeViewItem; begin Dataset.AutoCalcFields := False; try TreeView.Items.BeginUpdate; Dataset.DisableControls; Dataset.First; if (Node <> Nil) and ClearNode then Node.SubItems.Clear; while not Dataset.EOF do begin TreeNode := TreeView.Items.Add(Node); TreeNode.Expanded := False; TreeNode.Caption := Dataset.FieldByName(Field).AsString; TreeNode.Hint := HintItem(TreeNode.Caption); if not StrIsEmpty(CSSField) then TreeNode.CSS := CSSItem(Dataset.FieldByName(CSSField).AsInteger; else TreeNode.CSS := CSSItem(-1);
// using a fake node instead of loading all the user data at once in the treeview // it gives the user a visual effect that there is more data under the node
if FakeNode then TreeView.Items.Add(TreeNode); TreeNode.UserData := TNodeUserData.Create; TNodeUserData(TreeNode.UserData).NodeLevel := NodeLevel; TNodeUserData(TreeNode.UserData).RecordKey := Dataset.FieldByName(KeyField).AsInteger; if CheckCrazyOffer then begin if Dataset.FieldByName('crazy_offer').AsString = 'Y' then // Changing the image of the TreeNode based on a specif condition of the current record TreeNode.ItemImages.DocumentImage.Filename := 'hot.gif'; end; Dataset.Next; end finally Dataset.EnableControls; Dataset.AutoCalcFields := True; TreeView.Items.EndUpdate; end; end; How to use the method FillTreeView procedure TfrmTreeView.BuildHierarchy; var i: Integer; Node: TIWTreeViewItem; begin try if not UserSession.Material.Active then UserSession.Material.Open; if not UserSession.Classificacao.Active then UserSession.Classificacao.Open; if not UserSession.Espessura.Active then UserSession.Espessura.Open;
TreeView.Items.BeginUpdate; try FillTreeView(TreeView, Nil, UserSession.Material.Data, 'ds_eng', 'id_mat', '', '', False, NodeLevelMaterial); for i := 0 to TreeView.Items.Count - 1 do begin Node := TreeView.Items[i]; if TNodeUserData(Node.UserData).NodeLevel = NodeLevelMaterial then begin UserSession.Espessura.Data.Filter := 'id_mat = ' + IntToStr(TNodeUserData(Node.UserData).Chave); UserSession.Espessura.Data.Filtered := True; UserSession.Espessura.Data.First; FillTreeView(TreeView, Node, UserSession.Espessura.Data, 'ds_esp', 'id_esp', '', '', False, NodeLevelEspessura); TNodeUserData(Node.UserData).DetailLoaded := True; end; end;
UserSession.Espessura.Data.Filter := ''; UserSession.Espessura.Data.Filtered := False;
for i := 0 to TreeView.Items.Count - 1 do begin Node := TreeView.Items[i]; if TNodeUserData(Node.UserData).NodeLevel = NodeLevelEspessura then begin UserSession.Classificacao.Data.Filter := 'id_esp = ' + IntToStr(TNodeUserData(Node.UserData).Chave) + ' and id_mat = ' + IntToStr(TNodeUserData(Node.ParentItem.UserData).Chave); ; UserSession.Classificacao.Data.Filtered := True; UserSession.Classificacao.Data.First; FillTreeView(TreeView, Node, UserSession.Classificacao.Data, 'ds_cla', 'id_cla', '', '', False, NodeLevelClassificacao); TNodeUserData(Node.UserData).DetailLoaded := False; end; end;
UserSession.Classificacao.Data.Filter := ''; UserSession.Classificacao.Data.Filtered := False; if TreeView.Items.Count > 1 then TreeView.TreeItemClick(TreeView, TreeView.Items[0]); finally TreeView.Items.EndUpdate; end; except on e:exception do begin raise exception.create('BuildHierarchy: ' + e.Message); end; end; end;
|