Working with SharePoint collection objects

 

Introduction

Continuing further from my last post of Programming SharePoint Lists , in this post I shall be talking about the SharePoint collection objects. Though there are lot of collection objects available with SharePoint object model. I shall be introducing to you on the collection objects which comes under the hierarchy of the SharePoint architecture. The below diagram represents the hierarchy SharePoint objects

SharePoint collection objects

The solution that I will be showing in this post , is a simple web page which has a text box to show the site url and two cascading dropdownlists for Webs and Lists. When the user selects the item from Web dropdown list the Lists dropdown gets populated with items corresponding to that web.There is also a GridView which displays the fields of the selected list. So let us jumpstart with the code. First let us get the webs list based on the site url.

using (SPSite site = new SPSite(this.TxtSiteCollection.Text))
            {

                this.CboWebs.DataTextField = "Title";
                this.CboWebs.DataValueField = "ID";
                this.CboWebs.DataSource = site.AllWebs;

                this.CboWebs.DataBind();
                CboWebs.Items.Insert(0, new ListItem("Select Web"));

            }

The AllWebs property of the SPSite object is of SPWebCollection Type. So now we have Webs(Top level site and subsites) based on SPSite. Now let us look into how to get the Lists that are there is the selected Web

using (SPSite site = new SPSite(this.TxtSiteCollection.Text))
               {
                   using (SPWeb web = site.OpenWeb(new Guid(this.CboWebs.SelectedValue)))
                   {
                       this.CboLists.DataTextField = "Title";
                       this.CboLists.DataValueField = "ID";
                       this.CboLists.DataSource = web.Lists;
                       this.CboLists.DataBind();
                       this.CboLists.Items.Insert(0, "Select List");

                   }
              }

The Lists property of the SPWeb object is of SPListCollection Type. It is always a good practice to open every SharePoint object with its GUID. In the above code I am opening the Web by using its GUID with the OpenWeb method, though there are other ways of opening the web by appending with the site url by using OpenWeb method overloading operators. So now we have filled the Lists dropdown also , let us now get the fields based on the selected List. Here I would like to draw the readers attention that by default SharePoint creates lot of additional hidden and read only fields for the support of its various features. So this will display all those unnecessary fields that are not relevant to the developer  but there is way out of it. I have used Linq to Objects and filter those fields by setting those properties to false. Have look at the code below

using (SPSite site = new SPSite(this.TxtSiteCollection.Text))
               {
                   using (SPWeb web = site.OpenWeb(new Guid(this.CboWebs.SelectedValue)))
                   {

                       SPList list;
                       list = web.Lists[new Guid(this.CboLists.SelectedValue)];

                       var FldsLst = (from SPField field in list.Fields
                                      where field.Hidden == false && field.ReadOnlyField == false
                                      select new { FieldName = field.Title, FieldType = field.Type.ToString() }).ToList();
                       this.GrdFields.DataSource = FldsLst;
                       this.GrdFields.DataBind();

                   }
               }

Closure

SharePoint is a great technology to work with, its rich object model allows to create great applications on this platform.Download the sample code of this post from here.

Tip: Always use Linq to query the SharePoint collection objects rather than looping in them. It will save those great CPU cycles.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s