Create Custom Chart Web Part in SharePoint 2010

Posted: July 12, 2014 in SharePoint2010

Introduction

In this article I am exploring custom Chart Web Parts in SharePoint.

Reporting is an important part of any project. Sometimes the client requires the display of the records in a visual format.so we need to display records in a visual format like a Chart Web Part or some other.

Creating the sample

For displaying a list record in chart format please use the following procedure.

  1. Create a list with numeral values as in the following:Create a list with numeral values
  2. Add the following references to your “web.config” file in their respective locations:<SafeControls>
    <SafeControl Assembly=”System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ Namespace=”System.Web.UI.DataVisualization.Charting” TypeName=”*” Safe=”True” />
    <system.web>
    <httpHandlers>
    <add path=”ChartImg.axd” verb=”GET,HEAD,POST” type=”System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ validate=”false” />
    </httpHandlers>
    <appSettings>
    <add key=”ChartImageHandler” value=”storage=file;timeout=60;”/>
    <system.webServer>
    <handlers>
    <add name=”ChartImageHandler” preCondition=”integratedMode” verb=”GET,HEAD,POST” path=”ChartImg.axd” type=”System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
  3. Add the following code in the cs file:
    using System.Data;using System.Linq;

    using System.Web.UI;

    using Microsoft.SharePoint;

    using System.Web.UI.DataVisualization.Charting;

    namespace SPChartWp.ChartWp

    {

    public partial class ChartWpUserControl : UserControl

    {

    DataView dv;

    protected void Page_Load(object sender, EventArgs e)

    {

    try

    {

    SPSecurity.RunWithElevatedPrivileges(delegate()

    {

    using (SPSite oSite = new SPSite(SPContext.Current.Site.Url))

    {

    using (SPWeb oWeb = oSite.OpenWeb())

    {

    SPListCollection oListCollection = oWeb.Lists;

    SPList oList = oWeb.Lists[“Tracker”];

    SPListItemCollection oItems = oList.GetItems();

    DataTable dtMain = ConvertSPListToDataTable(oItems);

    var dtNkdkdew = (from r in dtMain.AsEnumerable()

    select r).Distinct();

    DataTable resulttbl = new DataTable();

    IEnumerable<string> DistinRRMasterID = new List<string>();

    DistinRRMasterID = (from results in dtMain.AsEnumerable()

    select (string)results[“Role”]).Distinct();

    //Create DataTable

    DataTable returnDt = new DataTable();

    DataRow oRow = returnDt.NewRow();

    string[] ColumnsArr = { “Role”, “Number Postions”, “In Progress”, “On Hold”, “L1 Scheduled”, “L2 Scheduled”, “HR Scheduled”, “​Offer Released” };

    int noOfColumns = ColumnsArr.Length;

    for (int cntr = 0; cntr < noOfColumns; cntr++)

    {

    DataColumn column = new DataColumn();

    column.ColumnName = ColumnsArr[cntr];

    column.DataType = typeof(string);

    returnDt.Columns.Add(column);

    }

     

    foreach (var rrRole in DistinRRMasterID)

    {

    var rrInProgressCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “In Progress”)

    select r).Count();

    var OnHoldCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “On Hold”)

    select r).Count();

    var L1RoundCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “L1 Round”)

    select r).Count();

    var L2RoundCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “L2 Round”)

    select r).Count();

    var HRRoundCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “HR Round”)

    select r).Count();

     

    var OfferReleasedCnt = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole

    && r.Field<string>(“Requirement Status”) == “Offer Released”)

    select r).Count();

    var MainColl = (from r in dtMain.AsEnumerable()

    where (r.Field<string>(“Role”) == rrRole)

    select r);

    #region Bind Fields datatable

    //Add Data to row

    //Create DataTable Rows

    oRow = returnDt.NewRow();

    var item = MainColl.FirstOrDefault();

    oRow[“Role”] = rrRole;

    oRow[“Number Postions”] = item[“NmberOfPostion”];

    oRow[“In Progress”] = rrInProgressCnt;

    oRow[“On Hold”] = OnHoldCnt;

    oRow[“L1 Scheduled”] = L1RoundCnt;

    oRow[“L2 Scheduled”] = L2RoundCnt;

    oRow[“HR Scheduled”] = HRRoundCnt;

    oRow[“​Offer Released”] = OfferReleasedCnt;

    returnDt.Rows.Add(oRow);

    #endregion

    }

     

    Chart1.ChartAreas[“ChartArea1”].AxisY.Title = “Number Postions”;

    Chart1.ChartAreas[“ChartArea1”].AxisX.Title = “Role”;

    Chart1.DataSource = returnDt;

    Chart1.DataBind();

    dv = new DataView(returnDt);

    dv.Sort = “Role ASC”;

    //Bind Data to Grid

    GridView1.DataSource = dv;

    GridView1.PagerTemplate = null;

    GridView1.DataBind();

    }

    }

    });

    }

    catch (Exception ex)

    {

    Response.Write(ex.Message);

    }

    }

    private static DataTable ConvertSPListToDataTable(SPListItemCollection spItemCollection)

    {

    DataTable dt = new DataTable();

    try

    {

    dt = spItemCollection.GetDataTable();

    foreach (DataColumn c in dt.Columns)

    c.ColumnName = System.Xml.XmlConvert.DecodeName(c.ColumnName);

    return (dt);

    }

    catch

    {

    return (dt);

    }

    }

    }

    }

  4. The Web Part will be display as below:
    Chart Web Part
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