Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I am building a web part that would be added to the bottom of every library view and would display the folder content types making it easy to create a new folder (rather than having to go to documents - new document and then select from a drop-down).

My first attempt used

    foreach(SPContentType type in list.ContentTypes)

This works but it gives me the content types in some sort of default order that has nothing to do with the order I set in the New Document button.

My next attempt I used

    SPFolder folder = web.GetFolder(Request.RawUrl);
    foreach(SPContentType type in folder.ContentTypeOrder)

This also works but gives me the exact same order as the first attempt even though I have unique new button orders set for each folder type in the library.

So how do I get the order in which items appear on the new button?

share|improve this question

2 Answers 2

In order to retrieve list of content types that ordered the same way as items appear on the new button:

            SPFolder folder = list.RootFolder; 
            if (folder.ParentListId != Guid.Empty)
            {
                var contentTypeOrder = folder.ContentTypeOrder;
                foreach (var contentType in contentTypeOrder)
                {
                    //...
                }
            }  

SPFolder.ContentTypeOrder property.

According to MSDN:

This property returns a list of SPContentType objects. The sequence of objects in the list determines the order in which content types are listed in the user interface, such as on a Sharepoint list’s New menu or on the List Settings page.

share|improve this answer
up vote 0 down vote accepted

I figured it out I was getting the folder object incorrectly. There may be a more elegant way to do this, but the following works:

            SPFolder folder;
            string rawUrl = Request.RawUrl;
            string rootFolder;
            if (rawUrl.Contains("RootFolder"))
            {
                int start = rawUrl.IndexOf("RootFolder");
                int end = rawUrl.IndexOf("&", start);
                int length = end - start;
                rootFolder = rawUrl.Substring(start, length);
                string url = rootFolder.Replace("RootFolder=", "");
                folder = web.GetFolder(url);
            }
            else
            {
                folder = list.RootFolder;
            }


            foreach (SPContentType type in folder.ContentTypeOrder)
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.