Getting items from a list is
something most developers do a lot, and one of the nice functions you can use
is the SPListItem.File.ParentFolder since it returns (what else couldt it do),
the parentfolder. Especialy when you’re creating something with navigation like
breadcrumbs or tabs, that function will provide you with enough information to
display the desired info.
However this seems to have a
little limitation, it only works on standard libraries that actually contains
‘items’ which means that if you are trying to use it on a custom list it won’t
work. And most developers use custom lists / content types. I hit the same
problem, but luckily someone posted a nice solution to this on MSDN (credits go to Donzola).
The following code will allow you
to get the parent folder of a list item:
///
<summary>
///
Returns the parent folder of an item in a list.
///
</summary>
///
<param name="itemToFind">Item whose parent folder you are
looking for.</param>
///
<param name="folder">Folder object to look in. Pass null
to start from the root.</param>
///
<returns>SPFolder object of parent folder or null if item isn't in a
folder or if the item isn't found.</returns>
static SPFolder GetParentFolder(SPListItem itemToFind, SPFolder folder)
{
SPQuery query = new SPQuery();
query.Folder = folder;
SPListItemCollection items =
itemToFind.ParentList.GetItems(query);
foreach (SPListItem item in items)
{
if (item.ID == itemToFind.ID)
{
return (folder);
}
if (item.Folder != null)
{
SPFolder resultFolder = GetParentFolder(itemToFind, item.Folder);
if (resultFolder != null)
{
return (resultFolder);
}
}
}
return (null);
}
So adding that function allows
you to get a parentfolder with:
SPFolder parentFolder = GetParentFolder(item, null);
Final note; make sure that you
check if the parentFolder != null before you use it.