web-dev-qa-db-fra.com

Remplir une arborescence de la base de données

J'ai une table de base de données (sujets nommés) qui comprend ces champs:

  1. topicide
  2. nom
  3. parentide

et en les utilisant, je veux peupler une arborescence en C #. Comment puis je faire ça ?

Merci d'avance...

15
Tarik

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);
     }

 }
14
Bob

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);
}
7
Brody

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;
}
6
MAK

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

5
Brij