Treeview and ContextMenuStrip

J

Joe Cool

Let's say I have a Treeview control on a form. Each leaf node in the
Treeview has a ContextMenuStrip, each with one ToolStripMenuItem, and
all ToolStripMenuItems Click event is handled by a comment event
handler.

How do I determine which Treeview Node signalled the menu event in the
common event handler?
 
N

Nicholas Paldino [.NET/C# MVP]

Joe,

When creating the ContextMenuStrip for the nodes in the treeview
(assuming you have a separate ContextMenuStrip for each node), I would
assign the Tag property to the node in the tree view. Then, in the event
handler, you can get the Tag property and know which node triggered the
menu.
 
X

xmail123

Since you are already using a treeview maybe you can answer this
question for me. I am new to C# and am trying to populate a treeview
from a SQL 2005 table. Do you have s snippit of code that will do
that or know a URL where I can see how?

I would really appreciate the help.

Thanks
 
J

Joe Cool

Since you are already using a treeview maybe you can answer this
question for me. I am new to C# and am trying to populate a treeview
from a SQL 2005 table. Do you have s snippit of code that will do
that or know a URL where I can see how?

Do you know how to either a) read a SQL2005 table, or b) populate a
treeview?
 
P

Phill W.

Joe said:
Let's say I have a Treeview control on a form. Each leaf node in the
Treeview has a ContextMenuStrip, each with one ToolStripMenuItem, and
all ToolStripMenuItems Click event is handled by a comment event
handler.

How do I determine which Treeview Node signalled the menu event in the
common event handler?

The ContextMenuStrip will be passed as the "sender" argument to the
event handler, as in

Sub xyz_Click( sender as Object, e as EventArgs )

Dim cms as ContextMenuStrip _
= DirectCast( sender, ContextMenuStrip )

From that, you can get the control that caused the ContextMenuStrip to
be shown, which will either be the TreeView or the TreeNode (I can't
remember which), as in

either
Dim tn as TreeNode _
= cms.SourceControl
or
Dim tn as TreeNode _
= DirectCast(cms.SourceControl,TreeView).SelectedNode

HTH,
Phill W.
 
X

xmail123

I can connect to the DB, create the dataadapter, populate a data set.
And I know how to add nodes to a treeview. The problem is how to use
the dataset to populate a treeview.

I have not found a Windows Forms C# example that can handle an
unspecified level of node nesting and Parent = Child. See child rows
15.

I would really appreciate the help.

Thank you.

I have a SQL Server 2005 table containing this data shown below.


Child...Parent...Depth.....Hierarchy
1.........NULL.....0.........01
2..........1.......1..........01.02
5..........2.......2..........01.02.05
6..........2.......2..........01.02.06
3..........1.......1..........01.03
7..........3.......2..........01.03.07
11.........7.......3..........01.03.07.11
14.........11......4..........01.03.07.11.14
12.........7.......3..........01.03.07.12
13.........7.......3..........01.03.07.13
8..........3.......2..........01.03.08
9..........3.......2..........01.03.09
4..........1.......1..........01.04
10.........4.......2..........01.04.10
15.........NULL....0..........15
15.........15......1..........15.15
16.........15......1..........15.16
18.........16......2..........15.16.18
17.........15......1..........15.17
 
J

Jack Jackson

I assume that the records you get back from the dataset have the child
records after their parent. If not, then the process becomes much
more complicated.

The brute force method is, for each record, loop through the treeview
nodes until you find the parent and add the new node.

If the Child field was unique, then you could use Child as the key for
each node. That way you could loop through the records in the
dataset, directly locate the parent using the Parent value as the key,
and add the new node. Yours are not unique, so unless you can modify
the data this technique will not work for you. I'm not sure exactly
what your data looks like, but maybe you can do this if you make the
key be a combination of Child and Depth if that combination is unique.
 
G

Guest

can u send the sample code to create different contextmenu for different
levels in a treeview...
 
X

xmail123

Yes the rows in teh data set are in order. My data looks like this.

Child...Parent...Depth.....Hierarchy
1.........NULL.....0.........01
2..........1.......1..........01.02
5..........2.......2..........01.02.05
6..........2.......2..........01.02.06
3..........1.......1..........01.03
7..........3.......2..........01.03.07
11.........7.......3..........01.03.07.11
14.........11......4..........01.03.07.11.14
12.........7.......3..........01.03.07.12
13.........7.......3..........01.03.07.13
8..........3.......2..........01.03.08
9..........3.......2..........01.03.09
4..........1.......1..........01.04
10.........4.......2..........01.04.10
15.........NULL....0..........15
15.........15......1..........15.15
16.........15......1..........15.16
18.........16......2..........15.16.18
17.........15......1..........15.17

The child nodes are not unique, a child may be it's own parent, see
15. This is because a person may be a member of a club and also the
president of the club.

A child may also have two parents. A person is a member of 2 clubs.

I am sure this is a common table structure but I have not found any
examples where it is used to populate a treeview.
 
A

Armin Zingler

Yes the rows in teh data set are in order. My data looks like this.

Child...Parent...Depth.....Hierarchy
1.........NULL.....0.........01
2..........1.......1..........01.02
5..........2.......2..........01.02.05
6..........2.......2..........01.02.06
3..........1.......1..........01.03
7..........3.......2..........01.03.07
11.........7.......3..........01.03.07.11
14.........11......4..........01.03.07.11.14
12.........7.......3..........01.03.07.12
13.........7.......3..........01.03.07.13
8..........3.......2..........01.03.08
9..........3.......2..........01.03.09
4..........1.......1..........01.04
10.........4.......2..........01.04.10
15.........NULL....0..........15
15.........15......1..........15.15
16.........15......1..........15.16
18.........16......2..........15.16.18
17.........15......1..........15.17

The child nodes are not unique, a child may be it's own parent, see
15. This is because a person may be a member of a club and also the
president of the club.

A child may also have two parents. A person is a member of 2 clubs.

I am sure this is a common table structure but I have not found any
examples where it is used to populate a treeview.


I think this is not possible in one treeview.

It seems you are mixing different criteria. (president, member, club). What
are the child and parent IDs? What do the hierarchy levels mean? What is at
the top level and what is below?


Armin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top