Skip to main content

Query SPList’s view, create HTML schema and render on page.

Normally we come across a requirement where we need to provide SharePoint List like UI and facilities to user in our solutions. I came across a good solution where in we query a view of SharePoint List, generate a new custom view and instead of updating default view we just copy the schema HTML and render it to page.
It provided me many advantages compared to using SPGrid and writing down code to handle sorting, filtering, paging and many more. The best part I found is Multi column filter and sorting is handled by SharePoint itself. No issues related to paging or UI.
Even though I have not tested below solution to extremes, but found it great so decided to document it.

Below are solution steps.
  • Create an empty SharePoint Project.
  •  Add a blank webpart to the project.
  •  Create few global properties in the webpart code file.

private string listName = "TestList1";
private string viewFields = "ID,test1,test2,test3";
private string emptyViewString = "No liked documents. Select and like new documents..:";
private int noItemsToDisplay = 20;
private string webparttitle = "My liked documents";


  •     Below is the code that will get schemaHTML from custom method and will render that on page.


protected override void CreateChildControls()
        {
            base.CreateChildControls();
            try
            {
                //Create XML definition for mylikeddocuments view
                string viewXML = this.CreatePersonalView();

                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPList list = web.Lists[this.listName];

                        // Create xsltlistviewwebpart control
                        this.listView = new Microsoft.SharePoint.WebPartPages.XsltListViewWebPart();
                        this.listView.Visible = true;
                        this.listView.EnableViewState = true;

                        // Bind listviewwebpart to the list.
                        this.listView.ListName = list.ID.ToString("B").ToUpperInvariant();

                        // When clicking the title, navigate to the View "My Liked Documents" in the list.
                        this.listView.TitleUrl = list.Views["All Items"].Url;
                        this.listView.WebId = web.ID;
                        this.listView.Title = this.webparttitle;
                        this.listView.ListId = (System.Guid)list.ID;
                        this.listView.UseSQLDataSourcePaging = true;

                        // Set XML definition of view to "My liked documents" XML
                        this.listView.XmlDefinition = viewXML;
                        this.listView.HelpMode = WebPartHelpMode.Modeless;

                        this.Controls.Add(this.listView);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label();
                lbl.Text = ex.Message;
                Controls.Add(lbl);
            }
        }

  •             Below custom method will query DefaultView of SharePoint List and returns SchemaHTML.


private string CreatePersonalView()
        {
            SPList list = SPContext.Current.Web.Lists[this.listName];
            // Create CAML Query to get documents
            string querystring = string.Empty;
            querystring = string.Concat("<OrderBy><FieldRef Name='ID'/></OrderBy>");

            // Based on the defaultview of the list, create a new view where the query is replaced with the custom query to extract liked documents.
            // Return the schemaxml of the view.
            string schemaxml = string.Empty;
            SPSecurity.RunWithElevatedPrivileges(delegate
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPList elevatedList = web.Lists[list.ID];

                        SPView view = elevatedList.DefaultView;
                        view.Query = querystring;

                        if (!string.IsNullOrEmpty(this.viewFields))
                        {
                            view.ViewFields.DeleteAll();
                            foreach (string fieldname in this.viewFields.Split(new char[] { ',' }))
                            {
                                view.ViewFields.Add(fieldname);
                            }
                        }

                        view.TabularView = false;
                        view.RowLimit = (uint)this.noItemsToDisplay;
                        view.Paged = true;

                        schemaxml = view.HtmlSchemaXml;
                    }
                }
            });
            return schemaxml;
        }

Below is the output of above code.



Thanks & Regards,

Keyur Pandya

Comments

Popular posts from this blog

Business Data Connectivity

I came to a requirement wherein I was supposed to get data from an 3 rd party portal using API’s and then bring them to SharePoint server. The first approach that I finalized was just to make BDC solution that will get data from 3 rd party portal and will deploy it to SharePoint. How to Create BDC solution in SharePoint? I found below link that is having really great description about hot to create and deploy the BDC solution to SharePoint. http://www.c-sharpcorner.com/uploadfile/hung123/creating-business-data-connectivity-service-using-visual-studio-2010/ After creating an POC I came to know that BDC model cannot be deployed on Multi tenant farm. So what can be done next? After some amount of googling I came to know that we can create BDC solution using WCF services also. So I created a WCF service solution that acted as a wrapper that used to fetch data from the portal. We can them publish that service to IIS or Server and use the servic...

Dataverse Multi Choice Columns in PowerApps

We have been working with PowerApps, PowerApps and Dataverse and now I thought of sharing a few tips to ease your work if you are new to PowerApps + Dataverse as a combination. I will be sharing a few more tips in my upcoming blogs but to get started, Let’s take Multi Choice Columns this time. Unlike SharePoint or any other data source, Dataverse Multi choice columns are different so basically, I cannot go to my PowerApp and directly print selected value in a label. So, this is how you can show multi choice values in label. You need to use concat that allows to concat multiple selection. PowerApps has concat function that takes. Concat function syntax :  Concat (  Table ,  Formula  ) In my case I am trying to render a multi choice column values into a vertical gallery webpart. I have added a label control to a vertical gallery and then added below code.   Concat(ThisItem.ColumnName,Value & "") Hope this helps, Thanks, Keyur

SharePoint hosted apps with Angularjs

Wow.. I thought i won't be able to manage to write a blog this month. Hey guys today i am here with a something of that i have been planning since a long time. Some time back i tried to implement Angularjs with SharePoint. To be frank Angularjs is just awesome. You can have flawless feel while working with it. I don't know how will i manage to work with Angularjs in huge projects but i found it really really good to work with single page applications. Let's have a look to the classic definition of Angularjs that you find when you google for Angularjs. Angularjs "AngularJS is a structural framework for dynamic web apps. It lets you use HTML as your template language and lets you extend HTML's syntax to express your application's components clearly and succinctly. Angular's data binding and dependency injection eliminate much of the code you would otherwise have to write." SharePoint Apps SharePoint Apps, I personally found it more developer...