469,631 Members | 1,515 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,631 developers. It's quick & easy.

Fill a tree view with a stored procedure

I have a stored procedure that returns a dataset. I want this dataset to
fill a tree view.

Here is the Stored Procedure Query

SELECT Product.Product_#, Product.Part_Number, Status.Status,
Traveler_Step.Step, Station.Station_Name
FROM Product INNER JOIN
Traveler_Step ON Product.Traveler_Step_# =
Traveler_Step.Traveler_Step_# INNER JOIN
Station ON Traveler_Step.Station_# = Station.Station_#
INNER JOIN
Status ON Product.Status_# = Status.Status_#
WHERE (Station.Station_# = 8)
Here is a typical result

Product_# Part_Number Status Step
Station_Name
----------- -------------------- -------------------- ----------- --------------------
48 123789 Active 40 Hot Mill
231 U06107LG Active 20 Hot Mill
I would like the tree view master node to be Station Name, the first child
node to be the Part Number with an icon next to it indicating the status,
next child node under part_number the Step and Product_#.

So this is what I am after

HotMill
|
-----(Active icon) 123789
|
------40
|
------48

I understand I need hierarchical data, but the stored procedure only returns
one dataset. How can I do this?

Thanks.

John
Mar 1 '06 #1
2 3937
Hi John
Suppose you populate your dataTable and you are ready to fill your tree
using FillTree :

private void FillTree(DataTable table)
{
foreach (DataRow row in table.Rows)
AddRow(row);
}

private void AddRow(DataRow row)
{
TreeNode stationNode =
FindStationNode(row["Station_Name"].ToString());
if (stationNode == null)
AddStationNode(row["Station_Name"]);

AddToStation(stationNode, row);
}

private void AddToStation(TreeNode stationNode, DataRow row)
{
TreeNode node = new TreeNode();
node.Text = row["Part_Number"].ToString();
if (row["Status"].ToString() == "Active")
node.ImageIndex = 0;
else
node.ImageIndex = 1;
node.Nodes.Add(row["Step"].ToString());
node.Nodes.Add(row["Product_#"].ToString());

stationNode.Nodes.Add(node);
}

private void AddStationNode(string name)
{
treeView1.Nodes.Add(name);
}

private TreeNode FindStationNode(string p)
{
foreach (TreeNode node in treeView1.Nodes)
if (node.Text == p)
return node;
return null;
}

Best Regards,
A.Hadi

Mar 1 '06 #2
I'm sorry.I thought I am in C# group. (VB version) :
Private Sub FillTree(ByVal table As DataTable)

For Each row As DataRow In table.Rows
AddRow(row)
Next
End Sub

Private Sub AddRow(ByVal row As DataRow)

Dim stationNode As TreeNode =
FindStationNode(row("Station_Name").ToString())
If stationNode Is Nothing Then
AddStationNode(row("Station_Name"))
End If
AddToStation(stationNode, row)
End Sub

Private Sub AddToStation(ByVal stationNode As TreeNode, ByVal row
As DataRow)

Dim node As TreeNode = New TreeNode()
node.Text = row("Part_Number").ToString()
If (row("Status").ToString() = "Active") Then
node.ImageIndex = 0
Else
node.ImageIndex = 1
node.Nodes.Add(row("Step").ToString())
node.Nodes.Add(row("Product_#").ToString())
End If

stationNode.Nodes.Add(node)
End Sub

Private Sub AddStationNode(ByVal name As String)

TreeView1.Nodes.Add(name)
End Sub

Private Function FindStationNode(ByVal name As String) As TreeNode

For Each node As treenode In treeView1.Nodes
If node.Text = name Then
Return node
End If
Next
Return Nothing
End Function

Thanks

Mar 1 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Justin | last post: by
9 posts views Thread by Nikolay Petrov | last post: by
5 posts views Thread by moondaddy | last post: by
1 post views Thread by apothecary | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.