Menu struktur som træ fortsat fra 755838
Spørgsmål fortsat fra http://www.eksperten.dk/spm/755838Håber du ser med dr_chaos.....
Jeg har forsøgt her til aften, at få det over i en database og så skrive den ekstra linie ind.
Den kender så ikke til Populate(); (no definition for Populate())
Mit problem er, når jeg trykker på en tekst nu, så laver den bare en ny træ struktur uden at folde ud eller lignende.
Min kode ser ud som følgende på nuværende tidspunkt:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Test af menustruktur<br />
<br />
<br />
<br />
<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"
ShowExpandCollapse="False">
<Nodes>
</Nodes>
</asp:TreeView>
<br />
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
public string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Inetpub\\wwwroot\\Test\\Menu\\menu.mdb;";
protected void Page_Load(object sender, EventArgs e)
{
PopulateNodes();
}
void PopulateNodes()
{
DataTable messages = GetTreeViewData();
DataView threads = GetThreads(messages);
foreach (DataRowView row in threads)
{
TreeNode threadNode = new TreeNode();
threadNode.Text = row["Subject"].ToString();
threadNode.Value = row["MessageID"].ToString();
TreeView1.Nodes.Add(threadNode);
AddReplies(messages, threadNode);
}
}
DataTable GetTreeViewData()
{
OleDbConnection con = new OleDbConnection(connectionString);
OleDbDataAdapter dad = new
OleDbDataAdapter("SELECT * FROM Discuss", con);
DataTable dtbl = new DataTable();
dad.Fill(dtbl);
return dtbl;
}
DataView GetThreads(DataTable discuss)
{
DataView view = new DataView(discuss);
view.RowFilter = "ParentID=0";
return view;
}
void AddReplies(DataTable messages, TreeNode node)
{
DataView replies = GetReplies(messages, node.Value);
foreach (DataRowView row in replies)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row["Subject"].ToString();
replyNode.Value = row["MessageID"].ToString();
node.ChildNodes.Add(replyNode);
AddReplies(messages, replyNode);
}
}
DataView GetReplies(DataTable messages, string messageID)
{
DataView view = new DataView(messages);
view.RowFilter = "ParentID=" + messageID;
return view;
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeView1.CollapseAll();
ExpandNodes(TreeView1.SelectedNode.ValuePath);
}
private void ExpandNodes(string valuepath)
{
string[] tmp = valuepath.Split('/');
string tmpValuePath = string.Empty;
foreach (string s in tmp)
{
tmpValuePath += s;
TreeView1.FindNode(tmpValuePath).Populate();
TreeView1.FindNode(tmpValuePath).Expand();
tmpValuePath += "/";
}
}
}
Hvad skal jeg bruge istedet for:
TreeView1.FindNode(tmpValuePath).Populate();
så den laver det samme, som da jeg ikke hentede fra database?
mvh
simsen :-)
