1

I would like to create a main overview chart with asp:chart control, like this:

enter image description here

Instead of Andrew, etc. it would be fiscal years (2009, 2010, 2011, etc.) and the products would be the 4 types of costs. But how do I do this with a list of custom objects that are contstructed like this:

List< Cost_cost > listOfCosts

  • Cost

    • Type (can be one of four types)
    • Amount (float)
    • Fiscal Year

Anybody got a link or tips on how to handle this?

1
  • Seriously, nobody? not even a link to a tut? Commented Jan 10, 2012 at 22:39

1 Answer 1

1

Found a solution, it's partialy hard coded, i.e., the types of costs but since it needs to be uploaded by the day after tomorrow, it'll do.

The following code of course is after I created Chart1, the mainlegend and area and some styling stuff:

//Set the amount of the four series to zero
float totalAmountHousing = 0, totalAmountPersonnel = 0, totalAmountServices = 0, totalAmountIT = 0;

//Create the four series per year
Series sr = new Series(); Series sr2 = new Series(); Series sr3 = new Series(); Series sr4 = new Series();

//Set the series to the same chart area
sr.ChartArea = "mainArea"; sr2.ChartArea = "mainArea"; sr3.ChartArea = "mainArea"; sr4.ChartArea = "mainArea";

//Set them to the same legend
sr.Legend = "mainLegend"; sr2.Legend = "mainLegend"; sr3.Legend = "mainLegend"; sr4.Legend = "mainLegend";

//Set the names of the 4 series
sr.Name = "Housing"; sr2.Name = "IT"; sr3.Name = "Services"; sr4.Name = "Personnel";

//Add the series to the chart
Chart1.Series.Add(sr); Chart1.Series.Add(sr2); Chart1.Series.Add(sr3); Chart1.Series.Add(sr4);

//Set drawing style to cylinder of the four costs
Chart1.Series["Housing"]["DrawingStyle"] = "Cylinder";
Chart1.Series["IT"]["DrawingStyle"] = "Cylinder";
Chart1.Series["Services"]["DrawingStyle"] = "Cylinder";
Chart1.Series["Personnel"]["DrawingStyle"] = "Cylinder";

for (int i = 0; i < listOfFiscalYears.Count; i++) {

    //generate some point for the chart
    for (int j = 0; j < listOfCosts.Count; j++) {
        if ((listOfCosts[j].Type).ToLower() == "housing"    && listOfCosts[j].Cost_fiscalYear.Year == int.Parse(listOfFiscalYears[i].ToString())) totalAmountHousing += (float)listOfCosts[j].Amount;
        if ((listOfCosts[j].Type).ToLower() == "it"         && listOfCosts[j].Cost_fiscalYear.Year == int.Parse(listOfFiscalYears[i].ToString())) totalAmountIT += (float)listOfCosts[j].Amount;
        if ((listOfCosts[j].Type).ToLower() == "services"   && listOfCosts[j].Cost_fiscalYear.Year == int.Parse(listOfFiscalYears[i].ToString())) totalAmountServices += (float)listOfCosts[j].Amount;
        if ((listOfCosts[j].Type).ToLower() == "personnel"  && listOfCosts[j].Cost_fiscalYear.Year == int.Parse(listOfFiscalYears[i].ToString())) totalAmountPersonnel += (float)listOfCosts[j].Amount;
    }

    Chart1.Series["Housing"].Points.Add(totalAmountHousing);
    Chart1.Series["IT"].Points.Add(totalAmountIT);
    Chart1.Series["Services"].Points.Add(totalAmountServices);
    Chart1.Series["Personnel"].Points.Add(totalAmountPersonnel);
    Chart1.ChartAreas["mainArea"].AxisX.Interval = 1;

    //Add custom label to the X axis
    Chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(i, i + 2, (listOfFiscalYears[i].ToString()), 0, LabelMarkStyle.None));

    //Reset the total cost after they have been added for the year
    totalAmountHousing = 0; totalAmountPersonnel = 0; totalAmountServices = 0; totalAmountIT = 0;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.