Lists and Libraries are the commonly used data storage components is a Sharepoint portal. With data growing huge in the lists, site administrators usually create folders to make the data organized. We use the 'ViewAttribute' of the SPQuery object to fetch all the items from the folders and sub folders. Below is a sample code snippet
using (SPWeb spWeb = SPContext.Current.Site.AllWebs["Reports"]) { SPList spList = spWeb.Lists.TryGetList("ManageReports"); SPQuery spQuery = new SPQuery(); //Setting the ViewAttribute to "Scope='Recursive'" //fetches all items from the list, //ie., also the items within the folders spQuery.ViewAttributes = "Scope=\"Recursive\""; SPListItemCollection items = spList.GetItems(spQuery); }
If the 'ViewAttribute' is not specified for the SPQuery object, then only those items which are in the root folder (ie., the root level of the list) are returned. So, we need to specify the scope in ViewAttribute property to get the items from all the folders (if any) of a list.
GETTING ITEMS FROM A SPECIFIC FOLDER
In some scenarios we might need to fetch only the items within a sepcific folder. For this we can use the 'Folder' property of SPQuery class. Prepare the SPQuery object with the required CAML query, set the RowLimit and other required settings. And then set the 'Folder' property to a Folder object which represents the folder instance from where we need the items. Refer the below code snippet
using (SPWeb spWeb = SPContext.Current.Site.AllWebs["Reports"]) { SPList spList = spWeb.Lists.TryGetList("ManageReports"); SPQuery spQuery = new SPQuery();//Getting the folder object from the list SPFolder folder = spList.RootFolder.SubFolders["FolderName"]; //Set the Folder property spQuery.Folder = folder; SPListItemCollection items = spList.GetItems(spQuery); //Now the items collection will have the items only from the given Folder
}