2012-08-06 10 views
5

Devo sviluppare una web part per SharePoint che legge un elenco e crea una vista ad albero.Creazione a livello di codice di una vista albero in sharepoint basata su una colonna

vista

L'albero deve essere organizzata come segue: La radice (o radici) deve essere creato da un campo scelta che rappresenta una categoria, per esempio bevande, i nodi figlio sono il nome delle righe che contengono quella categoria, la vista ad albero deve essere creata a livello di programmazione.

List: 
Title(string)  Category(Choice) 
Coke   Drinks 
Beer   Drinks 
Fish   Food 
Chips   Food 

Would produce this: 
Drinks 
    Coke 
    Beer 
Food 
    Fish 
    Chips 

codice che ho finora

TreeView treeView; 
    TreeNode rootNode; 
    TreeNode childNode; 


    protected override void RenderContents(System.Web.UI.HtmlTextWriter writer) 
    { 
     // render the control 
     base.RenderContents(writer); 
    } 

    protected override void CreateChildControls() 
    { 
     List<TreeNode> items = new List<TreeNode>(); 

     base.CreateChildControls(); 

     // get the current site 
     using (SPSite Site = new SPSite(SPContext.Current.Site.Url + "/UberWiki")) 
     { 
      using (SPWeb currentWeb = Site.OpenWeb()) 
      { 

       // set the tree view properties 



       SPList list = currentWeb.Lists["Pages"]; 

       SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"]; 

       foreach (string str in field.Choices) 
       { 
        treeView = new System.Web.UI.WebControls.TreeView(); 
        rootNode = new System.Web.UI.WebControls.TreeNode(str); 
        treeView.Nodes.Add(rootNode); 

        foreach (SPListItem rows in list.Items) 
        { 
         childNode = new System.Web.UI.WebControls.TreeNode(rows.Title); 
         treeView.Nodes.Add(childNode); 
        } 
       } 
      } 
      this.Controls.Add(treeView); 
      base.CreateChildControls(); 
     } 
    } 
+0

si può separare la porzione di codice che non è consentita in t he webpart e crea una classe C# separata per la Creazione TreeNode ..? – MethodMan

risposta

0

Un'altra soluzione, senza la necessità di pulire la stringa più scelte Valori

using (SPSite Site = new SPSite(SPContext.Current.Site.Url + "/UberWiki")) 
{ 
    using (SPWeb currentWeb = Site.OpenWeb()) 
    { 
     // set the tree view properties 
     SPList list = currentWeb.GetList(currentWeb.Url+"/Lists/Pages"); 

     SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"]; 
     treeView = new System.Web.UI.WebControls.TreeView(); 

     // Add root nodes 
     foreach (string str in field.Choices) 
     { 
      rootNode = new System.Web.UI.WebControls.TreeNode(str); 
      treeView.Nodes.Add(rootNode);       
     } 

     // Add child nodes 
     foreach (SPListItem rows in list.Items) 
     { 
      childNode = new System.Web.UI.WebControls.TreeNode(rows["Title"].ToString()); 
      treeView.FindNode(rows["Categories"].ToString()).ChildNodes.Add(childNode); 
     } 
    } 
    this.Controls.Add(treeView); 
    base.CreateChildControls(); 
} 
3

trovato la soluzione:

using (SPSite Site = new SPSite(SPContext.Current.Site.Url + "/UberWiki")) 
         { 
          using (SPWeb currentWeb = Site.OpenWeb()) 
          { 

           SPList list = currentWeb.Lists["Pages"]; 
           SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"]; 

           treeView = new System.Web.UI.WebControls.TreeView(); 

           foreach (string str in field.Choices) 
           { 

            treeNode = new System.Web.UI.WebControls.TreeNode(str); 

            foreach (SPListItem rows in list.Items) 
            { 
             SPFieldMultiChoiceValue multiChoice = new SPFieldMultiChoiceValue(Convert.ToString(rows["Wiki Categories"])); 

             string input = multiChoice.ToString(); 
//remove the ;# that comes with the multiple choiches 
             string cleanString = input.Replace(";#", ""); 

             if (cleanString == str) 
             { 
              string PageNameWithExt = rows.Name; 

              childNode = new System.Web.UI.WebControls.TreeNode(PageNameWithExt); 

              treeNode.ChildNodes.Add(childNode); 
             } 
            } 
            treeView.Nodes.Add(treeNode); 
           } 
          } 
         } 
         this.Controls.Add(treeView); 
         base.CreateChildControls(); 
        } 
Problemi correlati