public void CreateRealTimeChart() { List <int> returnedData = new List <int>(); System.Globalization.DateTimeFormatInfo mfi = new System.Globalization.DateTimeFormatInfo(); RealTimeChart.Titles[0].Text = "Current Month (" + mfi.GetMonthName(DateTime.Now.Month).ToString() + ")"; returnedData = ScoreCardReports.GetRealTime(); RealTimeChart.Series["New"].Points.Add(returnedData[0]); RealTimeChart.Series["Closed"].Points.Add(returnedData[1]); RealTimeChart.Series["Open"].Points.Add(returnedData[2]); RealTimeChart.Series["Unassigned"].Points.Add(returnedData[3]); RealTimeChart.Series["Averg"].Points.Add(returnedData[4]); RealTimeChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); CustomLabel customLabel = new CustomLabel(); string[] months = new string[] { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" }; customLabel.Text = months[(DateTime.Now.Month - 1)]; customLabel.FromPosition = 0.5; customLabel.ToPosition = 1.5; RealTimeChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); RealTimeChart.Series["Open"].LegendText = "Running Open"; RealTimeChart.Series["Averg"].LegendText = "Average Days Open"; }
//------------------------------------------------------------------------------------------ public void CreateBacklog() { DropDownList ddlbweek = (DropDownList)FindControl("ddlBacklogWeek"); ChartBacklog.Width = Unit.Percentage(100); ChartBacklog.Height = Unit.Pixel(400); ChartBacklog.CssClass = "chart"; ChartBacklog.PrimaryHeader.Text = "IT Tickets Backlog (Week: " + ddlBacklogWeek.SelectedItem.Text + " of " + ddlBacklogYear.SelectedItem.Text + ")"; ChartBacklog.TooltipSettings.AxisMarkers.Enabled = true; ChartBacklog.TooltipSettings.AxisMarkers.Mode = ChartXYMode.Y; ChartBacklog.TooltipSettings.AxisMarkers.Width = new Unit(1); ChartBacklog.TooltipSettings.AxisMarkers.ZIndex = 3; ChartBacklog.Font.Size = 12; ChartBacklog.Font.Bold = true; ChartAxisX axisX = new ChartAxisX(); axisX.CategoricalValuesField = "label"; //axisX.CategoricalValues = label.ToArray(); //axisX.CategoricalValues = monthLabels; ChartBacklog.Axes.Add(axisX); ChartAxisY axisY = new ChartAxisY(); axisY.Title.Text = "Hours"; ChartBacklog.Axes.Add(axisY); List <Backlog> datasource = new List <Backlog>(); ChartBarSeries splineSeriesNew = new ChartBarSeries(); splineSeriesNew.DataFieldY = "BacklogHour"; splineSeriesNew.ID = "BacklogHour"; splineSeriesNew.CollectionAlias = "Backlog"; ChartBacklog.DataSeries.Add(splineSeriesNew); List <double> newData = ScoreCardReports.GetBacklog_Hours(Convert.ToInt32(ddlBacklogWeek.SelectedValue), Convert.ToInt32(ddlBacklogYear.SelectedValue)); List <string> name = ScoreCardReports.GetBacklog_Names(Convert.ToInt32(ddlBacklogWeek.SelectedValue), Convert.ToInt32(ddlBacklogYear.SelectedValue)); if (newData.Count > 0) { for (int i = 0; i < newData.Count; i++) { datasource.Add(new Backlog() { BacklogHour = newData[i], label = name[i] }); } ChartBacklog.DataSource = datasource; //ChartResource.TakeDataSource += ChartResource_TakeDataSource; BacklogPanel.DataBind(); BacklogPanel.Controls.Add(ChartBacklog); } }
//------------------new ticket by it resource --------------------------// public void NewWeeklyByResource() { ChartResource.Width = Unit.Percentage(100); ChartResource.Height = Unit.Pixel(400); ChartResource.CssClass = "chart"; ChartResource.PrimaryHeader.Text = "New IT Tickets (Last 12 Weeks)"; ChartResource.TooltipSettings.AxisMarkers.Enabled = true; ChartResource.TooltipSettings.AxisMarkers.Mode = ChartXYMode.Y; ChartResource.TooltipSettings.AxisMarkers.Width = new Unit(1); ChartResource.TooltipSettings.AxisMarkers.ZIndex = 3; ChartResource.Font.Size = 12; ChartResource.Font.Bold = true; ChartAxisX axisX = new ChartAxisX(); axisX.CategoricalValuesField = "label"; // axisX.CategoricalValues = label.ToArray(); //axisX.CategoricalValues = monthLabels; ChartResource.Axes.Add(axisX); ChartAxisY axisY = new ChartAxisY(); axisY.Title.Text = "# of New Tickets"; ChartResource.Axes.Add(axisY); List <Tickets> datasource = new List <Tickets>(); ChartLineSeries splineSeriesNew = new ChartLineSeries(); splineSeriesNew.DataFieldY = "New"; splineSeriesNew.ID = "New Tickets"; splineSeriesNew.CollectionAlias = ddlResource.SelectedValue; ChartResource.DataSeries.Add(splineSeriesNew); List <int> newData = ScoreCardReports.Get12WeekNewByResource(ddlResource.SelectedValue); List <string> label = ScoreCardReports.Get12WeekLabels(); for (int i = 0; i < newData.Count; i++) { datasource.Add(new Tickets() { New = newData[i], label = label[i] }); } ChartResource.DataSource = datasource; //ChartResource.TakeDataSource += ChartResource_TakeDataSource; NewWeekly.DataBind(); NewWeekly.Controls.Add(ChartResource); }
public void CreateHistoricalTicketStats() { List <int> returnedData = new List <int>(); returnedData = ScoreCardReports.GetTotalTickets();//data gets returned as @Current,@OneToSeven, @SevenToThirty, @ThirtyToSixty,@SixtyToNinety, @OlderThenNinety TotalTicketsChart.Titles[0].Text = "Current Open Ticket Aging (" + returnedData.Sum() + ")"; TotalTicketsChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); float total = 0; foreach (int value in returnedData) { total += value; } TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[0] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[0].LegendText = "< Day (" + Math.Round(((returnedData[0] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[0].Color = Color.Green; TotalTicketsChart.Series["sData"].Points[0].Label = Math.Round(((returnedData[0] / total) * 100), 0) + "%"; TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[1] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[1].LegendText = "< Week (" + Math.Round(((returnedData[1] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[1].Color = Color.DeepSkyBlue; TotalTicketsChart.Series["sData"].Points[1].Label = Math.Round(((returnedData[1] / total) * 100), 0) + "%"; TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[2] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[2].LegendText = "< Month (" + Math.Round(((returnedData[2] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[2].Color = Color.DodgerBlue; TotalTicketsChart.Series["sData"].Points[2].Label = Math.Round(((returnedData[2] / total) * 100), 0) + "%"; TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[3] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[3].LegendText = "< 60 Days (" + Math.Round(((returnedData[3] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[3].Color = Color.Orange; TotalTicketsChart.Series["sData"].Points[3].Label = Math.Round(((returnedData[3] / total) * 100), 0) + "%"; TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[4] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[4].LegendText = "< 90 Days (" + Math.Round(((returnedData[4] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[4].Color = Color.Red; TotalTicketsChart.Series["sData"].Points[4].Label = Math.Round(((returnedData[4] / total) * 100), 0) + "%"; TotalTicketsChart.Series["sData"].Points.Add(Math.Round(((returnedData[5] / total) * 100), 0)); TotalTicketsChart.Series["sData"].Points[5].LegendText = "> 90 Days (" + Math.Round(((returnedData[5] / total) * 100), 0) + "%)"; TotalTicketsChart.Series["sData"].Points[5].Color = Color.Chocolate; TotalTicketsChart.Series["sData"].Points[5].Label = Math.Round(((returnedData[5] / total) * 100), 0) + "%"; TotalTicketsChart.DataBind(); }
private void mthCategoryLevelDrill(String ITMember, String className) { double none = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "none", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double hardware = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "Hardware", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double software = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "Software", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double network = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "Network", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double people = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "People/Accomodation", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double process = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "Process", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); double docs = ScoreCardReports.GetMonthNumberOfCategory(ITMember, className, "Documentation", Int32.Parse(ddlMth.SelectedValue), Int32.Parse(ddlYr.SelectedValue)); mthdrillDownDatasource.Add(new Issues() { Unassigned = none, Hardware = hardware, Software = software, Network = network, label = ITMember + ": " + className, People = people, Process = process, Documentation = docs }); MonthPanel.DataBind(); MonthPanel.TakeDataSource += MonthDrillDown_TakeDataSource; }
protected void WeeklyChart_TakeDataSource(object sender, Shield.Web.UI.ChartTakeDataSourceEventArgs e) { String myLabel = ""; //Define datasource List <Tickets> datasource = new List <Tickets>(); //Get Data from SQL Stored Procs List <int> Open = ScoreCardReports.WeekGetNumberOfOpenTickets(Int32.Parse(ddlWeek.SelectedValue), Int32.Parse(ddlYear.SelectedValue)); List <int> New = ScoreCardReports.WeekGetNumberOfNewTickets(Int32.Parse(ddlWeek.SelectedValue), Int32.Parse(ddlYear.SelectedValue)); List <int> Closed = ScoreCardReports.WeekGetNumberOfClosedTickets(Int32.Parse(ddlWeek.SelectedValue), Int32.Parse(ddlYear.SelectedValue)); myLabel = "Week " + ddlWeek.SelectedValue + " of " + ddlYear.SelectedValue; datasource.Add(new Tickets() { Open = Open[0], New = New[0], Closed = Closed[0], label = myLabel }); //Databind WeeklyChart.DataSource = datasource; }
protected void Chart12MthAging_TakeDataSource(object sender, Shield.Web.UI.ChartTakeDataSourceEventArgs e) { //Define datasource List <Tickets> datasource = new List <Tickets>(); //Get Data from SQL Stored Procs List <int> agingData = ScoreCardReports.Get12WeekAgingTickets(); List <string> label = ScoreCardReports.Get12WeekLabels(); // Merge 3 arraylist data into multidimentional class array for (int i = 0; i < agingData.Count; i++) { datasource.Add(new Tickets() { Aging = agingData[i], label = label[i] }); } //Databind ChartAging.DataSource = datasource; }
protected void Chart12WkComparison_TakeDataSource(object sender, Shield.Web.UI.ChartTakeDataSourceEventArgs e) { //Define datasource List <Tickets> datasource = new List <Tickets>(); //Get Data from SQL Stored Procs List <int> closedData = ScoreCardReports.Week12GetNumberOfClosedTickets(); List <int> openData = ScoreCardReports.Week12GetNumberOfOpenTickets(); List <int> newData = ScoreCardReports.Week12GetNumberOfNewTickets(); List <string> label = ScoreCardReports.Get12WeekLabels(); // Merge 3 arraylist data into multidimentional class array for (int i = 0; i < closedData.Count; i++) { datasource.Add(new Tickets() { Open = openData[i], New = newData[i], Closed = closedData[i], label = label[i] }); } //Databind Chart12WkComparison.DataSource = datasource; }
private void ClassLevelDrill() { //Get Data from SQL Stored Procs List <String> issueClass = ScoreCardReports.GetIssueClass(); List <String> iTmembers = new List <string>(); if (showIT == true) { iTmembers = ScoreCardReports.GetITMembers(); iTmembers.Remove("Unassigned"); //will always be 0 hours - no diplay } else { iTmembers.Add("ALL"); } foreach (String name in iTmembers) { double none = ScoreCardReports.GetNumberOfClasses(name, "none", Int32.Parse(ddlDrillWeek.SelectedValue), Int32.Parse(ddlDrillYear.SelectedValue)); double fault = ScoreCardReports.GetNumberOfClasses(name, "Fault/Failure", Int32.Parse(ddlDrillWeek.SelectedValue), Int32.Parse(ddlDrillYear.SelectedValue)); double service = ScoreCardReports.GetNumberOfClasses(name, "Service Request", Int32.Parse(ddlDrillWeek.SelectedValue), Int32.Parse(ddlDrillYear.SelectedValue)); double assistance = ScoreCardReports.GetNumberOfClasses(name, "Assistance/Inquiry", Int32.Parse(ddlDrillWeek.SelectedValue), Int32.Parse(ddlDrillYear.SelectedValue)); // Merge 3 arraylist data into multidimentional class array drillDownDatasource.Add(new Issues() { Unassigned = none, Fault = fault, Assistance = assistance, Service = service, label = name }); } //this change //TypePanel.DataBind(); TypePanel.TakeDataSource += WeekDrillDown_TakeDataSource; }
protected void Page_Load(object sender, EventArgs e) { /** Calculate Year **/ int _currentyear; const int _year = 2013; _currentyear = DateTime.Now.Year; int _currentMonth = DateTime.Now.Month; //only add if list is clear -- it will add new items on every graph refresh if (ddlYear.Items.Count < 1 || ddlDrillYear.Items.Count < 1) { for (int s = _currentyear; s >= _year; s--) { ddlYear.Items.Add(new ListItem((s).ToString(), (s).ToString())); ddlDrillYear.Items.Add(new ListItem((s).ToString(), (s).ToString())); ddlYr.Items.Add(new ListItem((s).ToString(), (s).ToString())); } } //ddlYear.DataBind(); /** Calculate Week **/ CultureInfo ciCurr = CultureInfo.CurrentCulture; int weekNum = ciCurr.Calendar.GetWeekOfYear(DateTime.Now.Date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); int mthNum = ciCurr.Calendar.GetMonthsInYear(DateTime.Now.Year); //only add if list if clear -- it will add new items on every graph refresh if (ddlWeek.Items.Count < 1 || ddlDrillWeek.Items.Count < 1) { for (int s = weekNum; s >= 1; s--) { ddlDrillWeek.Items.Add(new ListItem((s).ToString(), (s).ToString())); ddlWeek.Items.Add(new ListItem((s).ToString(), (s).ToString())); } } if (ddlMth.Items.Count < 1) { int stop = 12 - _currentMonth; for (int s = _currentMonth; s >= 1; s--) { ddlMth.Items.Add(new ListItem((s).ToString(), (s).ToString())); } for (int s = 12; s > 12 - stop; s--) { ddlMth.Items.Add(new ListItem((s).ToString(), (s).ToString())); } } if (ddlResource.Items.Count < 1) { List <String> members = new List <String>(); //get IT Members members = ScoreCardReports.GetITMembers(); members.Remove("Unassigned"); //should always be 0 hours - don't display foreach (String name in members) { ddlResource.Items.Add(name); } } if (ddlBacklogYear.Items.Count < 1) { List <int> years = new List <int>(); //get IT Members years = ScoreCardReports.GetBacklog_Year(); foreach (int name in years) { ddlBacklogYear.Items.Add(name.ToString()); } } if (ddlBacklogWeek.Items.Count < 1) { List <int> weeks = new List <int>(); //get IT Members weeks = ScoreCardReports.GetBacklog_Week(); foreach (int name in weeks) { ddlBacklogWeek.Items.Add(name.ToString()); } } CreateWeeklyChart(); Create12WeekChart(); CreateWeeklyIssuesDrillDown(); CreateMonthlyIssuesDrillDown(); CreateAgingChart(); NewWeeklyByResource(); CreateBacklog(); }
public void CreateTicketHealthTrendChart() { List <double> averageOpenData = new List <double>(); List <double> averageCloseData = new List <double>(); TicketHealthChart.Series["AverageOpen"].Points.Clear(); TicketHealthChart.Series["AvergToClose"].Points.Clear(); TicketHealthChart.Titles[0].Text = "Ticket Health"; TicketHealthChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); averageCloseData = ScoreCardReports.GetAverageCloseTime(); averageOpenData = ScoreCardReports.GetAverageOpenTime(); foreach (int value in averageOpenData) { TicketHealthChart.Series["AverageOpen"].Points.Add(value); } TicketHealthChart.Series["AverageOpen"].LegendText = "Average Day's Open"; foreach (int value in averageCloseData) { TicketHealthChart.Series["AvergToClose"].Points.Add(value); } TicketHealthChart.Series["AvergToClose"].LegendText = "Average Day's To Close"; CustomLabel customLabel = new CustomLabel(); System.Globalization.DateTimeFormatInfo mfi = new System.Globalization.DateTimeFormatInfo(); int selectedYear; int selectedMonth = DateTime.Today.Month - 1; if (selectedMonth < 1) { selectedMonth = 12; } int currentMonth = 0; if (selectedMonth == 12) { selectedYear = DateTime.Today.Year - 1; currentMonth = 1; } else { selectedYear = DateTime.Today.Year - 1; currentMonth = selectedMonth + 1; } double postion = 0.5; int postionModifier = 1; do { customLabel.Text = mfi.GetMonthName(currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; postion += postionModifier; currentMonth++; if (currentMonth == 13) // Roll over the month { currentMonth = 1; //Jan selectedYear = selectedYear + 1; // Increase the year we are now in the previous year. } TicketHealthChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); } while (currentMonth != selectedMonth); customLabel.Text = mfi.GetMonthName(currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; TicketHealthChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); }
public void CreateSixMonthTrendChart() { List <double> newData = new List <double>(); List <double> closedData = new List <double>(); List <double> openData = new List <double>(); SixMonthTrendChart.Series["New"].Points.Clear(); SixMonthTrendChart.Series["Closed"].Points.Clear(); SixMonthTrendChart.Series["Open"].Points.Clear(); SixMonthTrendChart.Titles[0].Text = "6 Month Trending"; SixMonthTrendChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); closedData = ScoreCardReports.GetSixMonthTrendClosed(); openData = ScoreCardReports.GetSixMonthTrendOpen(); newData = ScoreCardReports.GetSixMonthTrendNew(); foreach (int value in openData) { SixMonthTrendChart.Series["Open"].Points.Add(value); } SixMonthTrendChart.Series["Open"].LegendText = "Open"; foreach (int value in newData) { SixMonthTrendChart.Series["New"].Points.Add(value); } SixMonthTrendChart.Series["New"].LegendText = "New"; foreach (int value in closedData) { SixMonthTrendChart.Series["Closed"].Points.Add(value); } SixMonthTrendChart.Series["Closed"].LegendText = "Closed"; CustomLabel customLabel = new CustomLabel(); System.Globalization.DateTimeFormatInfo mfi = new System.Globalization.DateTimeFormatInfo(); DateTime d = new DateTime(2013, 01, 01); int selectedYear; int selectedMonth = DateTime.Today.Month; int currentMonth = DateTime.Parse(DateTime.Today.AddMonths(-6).ToString()).Month; if (selectedMonth == 12) { selectedYear = DateTime.Today.Year; } else { selectedYear = DateTime.Parse(DateTime.Today.AddMonths(-6).ToString()).Year; } double postion = 0.5; int postionModifier = 1; do { customLabel.Text = mfi.GetMonthName(currentMonth) + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; postion += postionModifier; currentMonth++; if (currentMonth == 13) // Roll over the month { currentMonth = 1; //Jan selectedYear = selectedYear + 1; // Increase the year we are now in the previous year. } SixMonthTrendChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); } while (currentMonth != selectedMonth); }
public void CreateASNIssueChart() { List <int> returnedData = new List <int>(); ASNIssueChart.Titles[0].Text = "ASN Issues (" + GetYearString(DateTime.Now, 12) + ")"; returnedData = ScoreCardReports.GetNumberOfASNIssues(); ASNIssueChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); int asnCount = 0; foreach (int value in returnedData) { ASNIssueChart.Series["sData"].Points.Add(value); asnCount += value; } ASNIssueChart.Series["sData"].LegendText = "Asn Issues(" + asnCount + ")"; CustomLabel customLabel = new CustomLabel(); //string[] months = new string[] {"JAN", "FEB", "MAR", "APR", // "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; int selectedYear; int selectedMonth = DateTime.Today.Month; int currentMonth = 0; if (selectedMonth == 12) { selectedYear = DateTime.Today.Year; currentMonth = 1; } else { selectedYear = DateTime.Today.Year - 1; currentMonth = selectedMonth + 1; } double postion = 0.5; int postionModifier = 1; do { customLabel.Text = (currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; postion += postionModifier; currentMonth++; if (currentMonth == 13) // Roll over the month { currentMonth = 1; //Jan selectedYear = selectedYear + 1; // Decrease the year we are now in the previous year. } ASNIssueChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); } while (currentMonth != selectedMonth); customLabel.Text = (currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; ASNIssueChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); Series trendLine = createTrendLine(ASNIssueChart.Series["sData"]); trendLine.ChartType = SeriesChartType.Line; //ASNIssueChart.Series.Add(trendLine); }
public void CreateComparisonChart() { List <int> newData = new List <int>(); List <int> closedData = new List <int>(); List <int> openData = new List <int>(); comparisonChart.Series["New"].Points.Clear(); comparisonChart.Series["Closed"].Points.Clear(); comparisonChart.Series["Open"].Points.Clear(); comparisonChart.Titles[0].Text = "12 Months Statistics (" + GetYearString(DateTime.Now.AddMonths(-1), 12) + ")"; comparisonChart.ChartAreas["caScoreCard"].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 11); closedData = ScoreCardReports.GetNumberOfClosedTickets(); openData = ScoreCardReports.GetNumberOfOpenTickets(); newData = ScoreCardReports.GetNumberOfNewTickets(); foreach (int value in openData) { comparisonChart.Series["Open"].Points.Add(value); } comparisonChart.Series["Open"].LegendText = "Open"; int newTotal = 0; foreach (int value in newData) { comparisonChart.Series["New"].Points.Add(value); newTotal += value; } comparisonChart.Series["New"].LegendText = "New"; int closedTotal = 0; foreach (int value in closedData) { comparisonChart.Series["Closed"].Points.Add(value); closedTotal += value; } comparisonChart.Series["Closed"].LegendText = "Closed"; CustomLabel customLabel = new CustomLabel(); string[] months = new string[] { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" }; System.Globalization.DateTimeFormatInfo mfi = new System.Globalization.DateTimeFormatInfo(); int selectedYear; int selectedMonth = DateTime.Today.Month - 1; if (selectedMonth < 1) { selectedMonth = 12; } int currentMonth = 0; if (selectedMonth == 12) { selectedYear = DateTime.Today.Year - 1; currentMonth = 1; } else { selectedYear = DateTime.Today.Year - 1; currentMonth = selectedMonth + 1; } double postion = 0.5; int postionModifier = 1; do { customLabel.Text = mfi.GetMonthName(currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; postion += postionModifier; currentMonth++; if (currentMonth == 13) // Roll over the month { currentMonth = 1; //Jan selectedYear = selectedYear + 1; // Increase the year we are now in the previous year. } comparisonChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); } while (currentMonth != selectedMonth); customLabel.Text = mfi.GetMonthName(currentMonth).ToString() + @"-" + selectedYear.ToString(); customLabel.FromPosition = postion; customLabel.ToPosition = postion + postionModifier; comparisonChart.ChartAreas[0].AxisX.CustomLabels.Add(customLabel); customLabel = new CustomLabel(); }