2012-08-06 134 views
5

我必須爲SharePoint開發一個Web部件來讀取列表並創建樹視圖。基於列以編程方式在Sharepoint中創建樹視圖

樹視圖必須被安排如下: 根(或根)是由表示的類別的選擇字段被創建,例如飲料, 子節點是行的名包含該類別的樹視圖必須以編程方式創建。

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

Would produce this: 
Drinks 
    Coke 
    Beer 
Food 
    Fish 
    Chips 

代碼我迄今爲止

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

你能分開不允許的代碼部分他webpart並創建一個單獨的C#類的TreeNode創建..? – MethodMan 2012-08-06 16:36:28

回答

0

,無需清洗多選擇串的另一種解決方案值

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

找到了解決辦法:

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(); 
        } 
相關問題