J'ai une table de base de données (sujets nommés) qui comprend ces champs:
et en les utilisant, je veux peupler une arborescence en C #. Comment puis je faire ça ?
Merci d'avance...
Ce sera probablement quelque chose comme ça. Donnez quelques détails sur ce que vous voulez faire exactement si vous en avez besoin de plus.
//In Page load
foreach (DataRow row in topics.Rows)
{
TreeNode node = new TreeNode(dr["name"], dr["topicId"])
node.PopulateOnDemand = true;
TreeView1.Nodes.Add(node);
}
///
protected void PopulateNode(Object sender, TreeNodeEventArgs e)
{
string topicId = e.Node.Value;
//select from topic where parentId = topicId.
foreach (DataRow row in topics.Rows)
{
TreeNode node = new TreeNode(dr["name"], dr["topicId"])
node.PopulateOnDemand = true;
e.Node.ChildNodes.Add(node);
}
}
Pas assez.
Les arbres sont généralement manipulés mieux en ne chargant pas tout ce que vous pouvez à la fois. Vous devez donc obtenir le noeud racine (ou le sujet) qui n'a pas de parentids. Ajoutez-les ensuite au nœud racine des arbres, puis pour chaque nœud que vous avez ajouté, vous devez obtenir ses enfants.
foreach (DataRow row in topicsWithOutParents.Rows)
{
TreeNode node = New TreeNode(... whatever);
DataSet childNodes = GetRowsWhereParentIDEquals(row["topicId"]);
foreach (DataRow child in childNodes.Rows)
{
Treenode childNode = new TreeNode(..Whatever);
node.Nodes.add(childNode);
}
Tree.Nodes.Add(node);
}
ce code court parfaitement pour moi, vérifiez-le, je pense que cela vous aidera :)
;
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = RunQuery("Select topicid,name from Topics where Parent_ID IS NULL");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode root = new TreeNode(ds.Tables[0].Rows[i][1].ToString(),ds.Tables[0].Rows[i][0].ToString());
root.SelectAction = TreeNodeSelectAction.Expand;
CreateNode(root);
TreeView1.Nodes.Add(root);
}
}
void CreateNode(TreeNode node)
{
DataSet ds = RunQuery("Select topicid, name from Category where Parent_ID =" + node.Value);
if (ds.Tables[0].Rows.Count == 0)
{
return;
}
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode tnode = new TreeNode(ds.Tables[0].Rows[i][1].ToString(), ds.Tables[0].Rows[i][0].ToString());
tnode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(tnode);
CreateNode(tnode);
}
}
DataSet RunQuery(String Query)
{
DataSet ds = new DataSet();
String connStr = "???";//write your connection string here;
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand objCommand = new SqlCommand(Query, conn);
SqlDataAdapter da = new SqlDataAdapter(objCommand);
da.Fill(ds);
da.Dispose();
}
return ds;
}
Lorsqu'il n'y a pas de grandes quantités de données, il n'est pas bon de connecter la base de données, de récupérer des données et d'ajouter à nouveau au nœud TreeView et encore pour les enfants/sous-nœuds. Cela peut être fait en tentative unique. Voir l'exemple suivant:
[.____] http://urenjoy.blogspot.com/2009/08/display-hierarchical-data-with-treeview.html