Pregunta

He intentando crear una vista de árbol que se va a mostrar un Sitios Listas y carpetas.Esta es una aplicación externa, así que tengo que comunicar con WSS3 a través de servicios web.

Site
|-List
|  |-Folder
|  |-Folder
|     |-Folder
|
|-List
|  |-Folder
|
|-List

Yo era capaz de perforar abajo de mi SPWeb.Lists objeto de obtener el SPListCollection.Sin embargo, desde el SPList.Folders colección que recibe el SPListItemCollection, no SPFolderCollection.No parece ser una propiedad de los objetos secundarios en el SPList objeto.

Como no puedes lanzar SPListItem a SPFolder Tengo el SPFolderCollection directamente desde SPWeb.Folders en su lugar, pero este parece que vuelve las cosas raras.

Tengo una Lista llamada "Desarrollador", que contiene una carpeta llamada "Primera" que tiene una subcarpeta llamada "más Profundo".

Este es el método recursivo escribí para crear nodos de las carpetas.

    private TreeNode[] CreateBranch(SPFolder folder)
    {
        if (folder.SubFolders.Count > 0)
        {
            List<TreeNode> branchList = new List<TreeNode>();

            TreeNode child;
            foreach (SPFolder item in folder.SubFolders)
            {
                if (item.SubFolders.Count > 0)
                    // Start recursion
                    child = new TreeNode(item.Name, CreateBranch(item));
                else
                    child = new TreeNode(item.Name);

                // Collect folders
                branchList.Add(child);
            }
            return branchList.ToArray();
        }
        return null;
    }

Esto genera en mí un árbol, como debe ser, pero las Subcarpetas de las Carpetas no parecen aparecen en la colección como un bucle a través de él a todos.El "Desarrollador" lista también surgió como una carpeta, así como los directorios web.

TreeView

Esto me ha dejado un poco confusa, en la colección a la que debo ser, y de cómo se supone que debo decir si una carpeta tiene subcarpetas en todo.Alguien puede ayudar me apunte en la dirección correcta?

¿Fue útil?

Solución

Esto se nota bastante una respuesta, sino más bien un comentario que no se ajuste a los espacios para comentarios...

Parece que quieres para mostrar las listas y, a continuación, las carpetas en las listas.Que no es lo mismo que mostrar las carpetas de un sitio.

SPWeb.Carpetas devuelve la lista de carpetas en un sitio de SharePoint de la raíz.Considerar como 'url-caminos' que existen en el sitio.Su 'Autor' de la lista (una biblioteca de documentos supongo?) es accesible como http://site/Developer/, por eso es que aparece como una lista y una carpeta.SPFolder.Subcarpetas debe devolver menor nivel de carpetas.

Usted probablemente después de las carpetas en una lista en particular.SPList.Carpetas devuelve todas las carpetas en una lista.Para una lista, una carpeta es sólo un elemento con contenido de tipo 'Carpeta', así que por eso conseguir que se devuelve como un SPListItemCollection no es tan extraño.Cada uno de los artículos splistitem tiene un SPFolder de la propiedad, pero no creo que lo necesito.Tenga en cuenta que SPList.Carpetas devuelve todas las carpetas en la lista (de forma recursiva).

Como se ha señalado anteriormente por el Kit Menke, el código parece utilizar el modelo de objeto de servidor, obtener la información de webservices no es exactamente el mismo, pero va a ayudar a entender el modelo de objetos de primera y utilizarla para averiguar lo que desea mostrar.

Otros consejos

He encontrado este artículo, mientras que la búsqueda de una función para obtener todas las carpetas de un determinado documento de la biblioteca como un árbol.Debido a algunos errores en el método recursivo se muestra Amistoso reescribí el método.Puede ser que es útil para los demás:

La función recursiva:

private void CreateBranch(SPFolder folder, TreeNode tnParent)
{
    if (folder.SubFolders.Count > 0)
    {
        foreach (SPFolder item in folder.SubFolders)
        {
            TreeNode child = new TreeNode(item.Name);

            if (item.SubFolders.Count > 0)
            {
                // Start recursion
                CreateBranch(item, child);
            }
            tnParent.ChildNodes.Add(child);
        }
    }
}

Llamar a la función:

SPFolder listRootFolder = SPContext.Current.Web.Lists["Shared Documents"].RootFolder;
TreeNode parentNode = new TreeNode("root");
CreateBranch(listRootFolder, parentNode);
Licenciado bajo: CC-BY-SA con atribución
scroll top