2012-08-06 13 views
5

Tengo que desarrollar un elemento web para SharePoint que lea una lista y cree una vista en árbol.Crear mediante programación una vista de árbol en SharePoint basada en una columna

vista

El árbol tiene que ser organizado de la siguiente manera: La raíz (o raíces) debe ser creado por un campo de elección, que representa una categoría, por ejemplo bebidas, los nodos secundarios son el nombre de las filas que contienen esa categoría, la vista de árbol debe crearse mediante programación.

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

Would produce this: 
Drinks 
    Coke 
    Beer 
Food 
    Fish 
    Chips 

código que tengo hasta ahora

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

puede separar la porción del código que no está permitido en t él webpart y crea una clase C# separada para la creación TreeNode ..? – MethodMan

Respuesta

0

Otra solución sin la necesidad de limpiar la cadena de elección múltiple valora

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

encontrado la solución:

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