Treeview med flere childnodes
Hejsa,Jeg har et treeview, som fungerer perfekt......sålænge der kun er én childnode (altså ét lag). Hvor i min kode (og ikke mindst hvad) skal jeg rette, så der er to lag.
Med et lag:
Produkter
--Heste
--Katte
--Hunde
Med to lag:
Produkter
--Heste
----Fodertrug
----Hestebørste
--Katte
----Kattebørste
----Kattelegetøj
--Hunde
osv
Min kode ser ud som følgende:
protected void Page_Load(object sender, EventArgs e)
{
ANSIApi api = new ANSIApi();
if (IsPostBack == false)
{
try
{
if (api.GetTopMenu(MenuTree) == ANSIApi.FStatus.Success)
{ }
}
catch
{ }
}
}
protected void MenuTree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
ANSIApi api = new ANSIApi();
//hvis der ikke er nogen child nodes til noden
if (e.Node.Depth == 0)
{
try
{
api.GetSubMenu(e.Node);
}
catch
{ }
}
}
protected void MenuTree_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
{
try
{
int key_id = Convert.ToInt32(e.Node.Value);
lblMenuId.Text = key_id.ToString();
lblMenuId.Visible = true;
}
catch
{
}
}
protected void MenuTree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
try
{
int key_id = Convert.ToInt32(e.Node.Value);
lblMenuId.Text = key_id.ToString();
lblMenuId.Visible = true;
if (e.Node.Depth == 0)
{
TreeView t = (TreeView)sender;
for (int i = 0; i < t.Nodes.Count; i++)
{
if (t.Nodes[i] != e.Node)
{
t.Nodes[i].CollapseAll();
}
}
}
}
catch
{
}
}
Koden til de to funktioner er:
//Henter Topmenu tabellen
public FStatus GetTopMenu(TreeView n)
{
FStatus status = FStatus.Failure;
DataRow r = null;
DataTable AItems = new DataTable();
try
{
AItems.Columns.Add(new DataColumn("MenuID", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("ParentMenuID", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("MenuName", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("HasChilds", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Body", Type.GetType("System.String")));
command.CommandText = "SELECT MenuID, ParentMenuID, MenuName, HasChilds, Body FROM Sider WHERE ParentMenuID = 0";
//command.Parameters.Clear();
//command.Parameters.Add(new OleDbParameter("@FirmaID", FirmaID));
OleDbDataReader myReader = command.ExecuteReader();
//går gennem tabellen og lægger ind i rækker
while (myReader.Read())
{
r = AItems.NewRow();
try
{
TreeNode t = new TreeNode(myReader["MenuName"].ToString(), myReader["MenuID"].ToString());
t.PopulateOnDemand = true;
t.SelectAction = TreeNodeSelectAction.Expand;
t.Expanded = false;
n.Nodes.Add(t);
}
catch
{ }
//Tilføjer rækken til datatable
AItems.Rows.Add(r);
}
myReader.Close();
//TopMenu = AItems;
status = FStatus.Success;
}
catch
{ }
return status;
}
//Henter Submenu tabellen
public FStatus GetSubMenu(TreeNode n)
{
FStatus status = FStatus.Failure;
DataRow r = null;
DataTable AItems = new DataTable();
try
{
AItems.Columns.Add(new DataColumn("MenuID", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("ParentMenuID", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("MenuName", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("HasChilds", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Body", Type.GetType("System.String")));
command.CommandText = "SELECT MenuID, ParentMenuID, MenuName, HasChilds, Body FROM Sider WHERE ParentMenuID = @ParentMenuID";
command.Parameters.AddWithValue("@ParentMenuID", n.Value);
OleDbDataReader myReader = command.ExecuteReader();
//går gennem tabellen og lægger ind i rækker
while (myReader.Read())
{
r = AItems.NewRow();
try
{
TreeNode t = new TreeNode(myReader["MenuName"].ToString(), myReader["MenuID"].ToString());
t.SelectAction = TreeNodeSelectAction.Expand;
t.Expanded = false;
n.ChildNodes.Add(t);
}
catch
{ }
//Tilføjer rækken til datatable
AItems.Rows.Add(r);
}
myReader.Close();
status = FStatus.Success;
}
catch
{ }
return status;
}
mvh
simsen :-)