2012-08-06 14 views
5

Muszę opracować część Web dla programu SharePoint, która odczytuje listę i tworzy widok drzewa.Programowe tworzenie widoku drzewa w programie SharePoint na podstawie kolumny

widoku drzewa musi być zorganizowany w sposób następujący: korzeń (lub korzenie) ma być utworzona przez pole wyboru, który reprezentuje kategorię, na przykład Napoje, węzły potomne są nazwa rzędami które zawierają tę kategorię, widok drzewa musi zostać utworzony programowo. Kod

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

Would produce this: 
Drinks 
    Coke 
    Beer 
Food 
    Fish 
    Chips 

mam tak daleko

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

Można oddziel fragment kodu, który nie może być wt on webpart i utworzyć oddzielną klasę C# dla TreeNode Creation ..? – MethodMan

Odpowiedz

0

Innym rozwiązaniem, bez konieczności czyszczenia wielociąg wybór ceni

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

Znaleziono rozwiązanie:

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