2012-07-27 7 views
0

Salut J'utilise sharepoint 2010 et je crée une arborescence dans un webpart pour afficher les éléments d'une bibliothèque de documents. Ce code ne fonctionne pas pour moi, il affiche tout dans le même site ... Je voudrais pouvoir spécifier quelle bibliothèque de documents utiliser.Sharepoint 2010 - webpart treeview ne fonctionne pas

En outre, il met en double-nœuds, si je vais à la page d'édition, il ajoute un doublon, si je laisse le mode d'édition, il ajoute un autre doublon. enter image description here

Quelqu'un peut-il aider?

using System; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Utilities; 
using System.Web; 
using System.IO; 

namespace VisualWebPartProject1.VisualWebPart1 
{ 
    public partial class VisualWebPart1UserControl : UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      SPWeb thisWeb = null; 
      TreeNode node; 
      using (thisWeb = SPContext.Current.Web) 
      { 




       //Add the Web's title as the display text for the tree node, and add the URL as the NavigateUri. 
       node = new TreeNode(thisWeb.Title, null, null, thisWeb.Url, "_self"); 
       //The Visual Web Part has a treeview control called siteStructure. 
       siteStructure.Nodes.Add(node); 
       //Get a reference to the current node, so child nodes can be added in the correct position. 
       TreeNode parentNode = node; 
       //Iterate through the Lists collection of the Web. 


       /* 
       foreach (SPListItem item in myList.Items) 
       { 
        SPFieldUrlValue data = item["Url"] as SPFieldUrlValue; 
        // now you have data.Description, data.Url 
        node = new TreeNode(Path.GetFileName(data.Url), null, null, data.Url, "_self"); 
        parentNode.ChildNodes.Add(node); 

       } 
       */ 



       foreach (SPList list in thisWeb.Lists) 
       { 
        if (!list.Hidden) 
        { 
         node = new TreeNode(list.Title, null, null, list.DefaultViewUrl, "_self"); 
         parentNode.ChildNodes.Add(node); 
        } 
       } 
       foreach (SPWeb childWeb in thisWeb.Webs) 
       { 
        //Call our own helper function for adding each child Web to the tree. 
        addWebs(childWeb, parentNode); 
        childWeb.Dispose(); 
       } 


       siteStructure.CollapseAll(); 

      } 
     } 
     void addWebs(SPWeb web, TreeNode parentNode) 
     { 
      TreeNode node; 
      node = new TreeNode(web.Title, null, null, web.Url, "_self"); 
      parentNode.ChildNodes.Add(node); 
      parentNode = node; 
      foreach (SPList list in web.Lists) 
      { 
       if (!list.Hidden) 
       { 
        node = new TreeNode(list.Title, null, null, list.DefaultViewUrl, "_self"); 
        parentNode.ChildNodes.Add(node); 
       } 
      } 
      foreach (SPWeb childWeb in web.Webs) 
      { 
       //Call the addWebs() function from itself (i.e. recursively) 
       //to add all child Webs until there are no more to add. 
       addWebs(childWeb, parentNode); 
       childWeb.Dispose(); 

      } 
     } 
    } 
} 

Répondre

2

Essayez d'ajouter ceci avant votre déclaration en utilisant:

If(node.Nodes.Count == 0) { // The rest of your code here } 
0

Ajouter WebProperties à votre webpart pour pouvoir configurer par exemple la bibliothèque que vous souhaitez utiliser à la place un hardcoded. Dans cette propriété, vous pouvez spécifier le nom des listes et le lire pour charger cette liste.

aussi pour éviter de multiples inserts sur modifier, etc. s'il vous plaît ajouter votre code dans l'événement Page_Load l'intérieur

if (!Page.IsPostBack) 
{ 
    Your code goes here... 
} 

Cela évite l'exécution de votre code chaque fois que vous chargez ou même Postback la page et ceci fait que vous ajouter chaque fois un nouveau noeud à votre arbre.

Questions connexes