2010-04-13 7 views
0

J'ai un contrôle treeView dans la page ASP.NET qui sera chargé avec jusqu'à 12 000 nœuds dans différents niveaux. Par exemple:Contrôle TreeView Asp.net - nombre maximal de nœuds

  • Noeud 1

    • Node 1.1 ...

      • Noeud 1,400

        • Noeud 1.400.1

          ...

        • Noeud 1.400.6400
  • Noeud 2
  • Node 3
  • Noeud 4

Selon ce lien:

http://msdn.microsoft.com/en-us/library/ms529261.aspx

la limite de nœud est 1000. Est-ce exact ou est-il dépend de la mémoire disponible (valeur s'il vous plaît préciser)?

En supposant que c'est correct. est-il un moyen de diviser les 4600 nœuds enfants, disons en morceaux de 300 cents? Je pense que si des noeuds factices sont utilisés (navigation précédente/suivante) pour naviguer dans les morceaux, le chargement de la page html sera facile.

Un exemple de code en C# sera grandement apprécié. (Ou VB.NET si vous ne pouvez pas traduire à C#)

Répondre

0

A la fin, nous utilisons Obout treeview parce qu'il n'a pas les limites du treeview asp.net indiqué sur ma question, plus je peut charger des milliers de nœuds sans problème et sa fonctionnalité de chargement virtuel est excellente.

1
TreeNode node; 
node = new TreeNode(Session["Type"].ToString(), Session["Type"].ToString(), "", "Sub_cat.aspx?MainCat=" + Session["Type"].ToString(), ""); 
node.SelectAction = TreeNodeSelectAction.SelectExpand; 
TreeView1.Nodes.Add(node); 
string str1 = "select * from sub_cat where main_cat='"+Session["Type"].ToString() +"'"; ///+ node.Text + "'"; 
dt1 = db.gettable(str1); 
for(int x=0;x<dt1.Rows.Count;x++) 
{ 
    //Session["subcat"] = dt1.Rows[x]["sub_cat"].ToString(); 
    string sub = dt1.Rows[x]["sub_cat"].ToString(); 
    TreeNode node1 = new TreeNode(dt1.Rows[x]["sub_cat"].ToString(), dt1.Rows[x]["sub_cat"].ToString(), "", "Product_collection.aspx?sub_cat=" + sub, ""); 
    node1.SelectAction = TreeNodeSelectAction.SelectExpand; 
    //TreeView1.Nodes.Add(node1); 
    node.ChildNodes.Add(node1); 

    string str2 = "select * from product_master where main_cat='" + Session["Type"].ToString() + "' and sub_cat='" + node1.Text + "' order by product_code asc"; 
    dt2 = db.gettable(str2); 
    for(int y=0;y<dt2.Rows.Count;y++) 
    { 
     // Session["product_code"]=dt2.Rows[y]["product_code"].ToString(); 
     string code = dt2.Rows[y]["product_code"].ToString(); 
     TreeNode node2 = new TreeNode(dt2.Rows[y]["product_code"].ToString(), dt2.Rows[y]["product_code"].ToString(), "", "prod_desc.aspx?product_code=" + code, ""); 
     node2.SelectAction= TreeNodeSelectAction.SelectExpand; 
     node1.ChildNodes.Add(node2); 
    } 
} 
0

Vous ne devriez pas charger plus que les noeuds visibles à la fois , lorsque l'utilisateur développe un niveau de nœud, vous pouvez/pourrait/devrait/devez utiliser load à la demande pour charger les enfants et ainsi de suite de façon récursive uniquement lorsque cela est nécessaire. Ne surchargez pas le rendu de la page en chargeant tous les nœuds, cela n'a aucun sens.

recherche de charge sur la demande asp.net TreeView et similaires ...

+0

Je charge des nœuds à la demande, mais l'arborescence aura toujours tous les nœuds chargés présents dans le navigateur client. (En d'autres termes, la page peut commencer avec 20 nœuds initiaux - mais lorsque l'utilisateur développe des nœuds - le contrôle peut contenir des milliers de nœuds). –