Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations derfloh on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Tree View

Status
Not open for further replies.

sanjna000

Programmer
Aug 1, 2003
132
GB
Hi,
I've got a tree view. It contains no. of tree nodes. Each node contains child nodes.

For example,
Node1 - Display contents of dataset1(in the click event)
-ChildNode1(Display contents of dataset2 in click event)
-ChildNode2(Display contents of dataset3 in click event)
-ChildNode3(Display contents of dataset4 in click event)
-ChildNode4(Display contents of dataset5 in click event)
Node2
Node3
.
.
.

I need to display relevant text in the rich edit control i have in the form when user clicks on each node and each child node. The code i used is as follows:

In the Tree view on click event,

SelectedIndex := TreeView.Selected.Index;
If TreeView.Items.Item[SelectedIndex ].Selected Then
RE_Viewer.Text := DataSet1.Content
Else If TreeView.Items.Item[SelectedIndex].Item[0].Selected Then
RE_Viewer.Text := DataSet2.Content
Else If TreeView.Items.Item[SelectedIndex].Item[1].Selected Then
RE_Viewer.Text := DataSet3.Content
Else If TreeView.Items.Item[SelectedIndex].Item[2].Selected Then
RE_Viewer.Text := DataSet4.Content
Else If TreeView.Items.Item[SelectedIndex].Item[3].Selected Then
RE_Viewer.Text := DataSet5.Content;

But this code doesn't give the expected output. It raised an exception saying list index out of bounce. Can any one help me to solve this problem.

Thank you so much for u r help in advance...
Sanjna...
 
Hi Sanja,

Suppose ChildNode4 is selected.

TreeView.Selected will be ChildNode4

TreeView.Selected.Index (your SelectedIndex) will be 3

TreeView.Items.Item[3] would be....... ah...... at the top level there is only Node1 (Index 0), Node2 (Index 1) and Node 3 (Index 2).


Try using the TTreeNode.Data property, rather than indexes. Something like this:

TForm1.FormCreate
begin
Node1.Data:=pointer(Dataset1);
ChildNode1.Data:=pointer(Dataset2);
ChildNode2.Data:=pointer(Dataset3);
...
...
end;

TTreeView1.OnClick
begin
with TreeView1 do
begin
if(Selected=nil)or
(Selected.Data=nil)then
Exit;

RE_Viewer.Text := TDataset(Selected.Data).Content;
end;
end;

Have fun
Simon
 
Hi Simon,

Thank u so much for u r help. I did try with u r code. Unfortunately it raised an exception. In my form create method i used following code.

Begin
TreeView.Items.Clear;
With qryGeneral Do
Begin
SQL.Clear;
SQL.Add( 'SELECT ID' );
SQL.Add( 'FROM table' );
Open;
For i := 1 To RecordCount Do
Begin
new(idInfo);
idInfo^.ID := FieldByName( 'ID' ).AsString;
tNode := TreeView.Items.AddObject( Nil, FieldByName( 'ID' ).AsString, idInfo );
tNode.Data := Pointer( DataSet0 );
TreeView.Items.AddChildObject( tNode, ChildNode1Caption, idInfo );
tNode.Item[0].ImageIndex := 6;
tNode.Item[0].SelectedIndex := 6;
tNode.Item[0].Data := Pointer( DataSet1 );
TreeView.Items.AddChildObject( tNode, ChildNode2Caption, idInfo );
tNode.Item[1].Data := Pointer( DataSet2 );
TreeView.Items.AddChildObject( tNode, ChildNode3Caption, idInfo );
tNode.Item[2].Data := Pointer( DataSet3 );
TreeView.Items.AddChildObject( tNode, ChildNode4Caption, idInfo );
tNode.Item[0].Data := Pointer( DataSet4 );
Next;
End;
Close;
End;

Have i done something wrong in here?
Sanjna...
 
Hi simon,

Now my program works well. I have overwrite the data property. That is why it caused an exception. Anyway thank u so much for the help.

Sanjna...
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top