Code Samples

Last Updated: 6/2/2009



Sections above here:
Home  »  Class Reference  »  TIWTreeView

Sections below here:

    Topics in this section:
    Property UserData
    Property CSS
    Event OnPlusMinus
    Property DoServerSidePlusMinus
    ScrollToName
    TIWTreeViewItems.Add
    Code Samples

    Search Documentation:

    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;



    (C) 2002-2009 - Atozed Software Ltd.