?
Solved

ASP.net Dynamically building a Chart using a GridView

Posted on 2014-02-10
2
Medium Priority
?
887 Views
Last Modified: 2014-02-10
Hi

I am trying to build the chart from the GridView shown in the image dynamically
using the VB.net code below.
How do I add the Company names and years to the X axis

 1
   Sub oChart(ByVal RowFields As String, ByVal DataField As String, ByVal sAggregate As String, ByVal ColumnFields As String, oChartID As String, ByVal oRow As Integer, ByVal oColumn As Integer, ByVal blnShow_Data_With_Chart As Boolean)
        ' Initialize the Chart object    
        Dim chart1 As New Chart()
        'chart1.ID = "chart1"

        'Add to do code here
        If Not IsPostBack Then
            ' Initialize objects and elements
            Dim chartArea1 As New ChartArea()
            Dim legend1 As New Legend()
            Dim series1 As New Series()
            Dim series2 As New Series()
            Dim series3 As New Series()

            ' Set the Chart Properties
            chart1.Width = 340
            chart1.Height = 340

            chart1.Palette = ChartColorPalette.EarthTones
            chart1.Palette = ChartColorPalette.Excel
            chart1.BackColor = System.Drawing.Color.Gray
            chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss

            chart1.BorderlineColor = System.Drawing.Color.Gray
            chart1.BorderlineDashStyle = ChartDashStyle.Solid
            chart1.BorderlineWidth = 4

            ' Set the ChartArea properties
            chartArea1.Name = "Default"
            chartArea1.BackColor = System.Drawing.Color.Gray

            'Enable AJAX features such as zooming and scrolling for the ChartArea
            'chartArea1.CursorX.UserEnabled = True
            'chartArea1.CursorY.UserEnabled = True
            'chartArea1

            ' Add the ChartArea to the Chart
            chart1.ChartAreas.Add(chartArea1)

            ' Set the Legend properties
            legend1.Name = "Default"
            legend1.Docking = Docking.Bottom
            legend1.LegendStyle = LegendStyle.Row
            legend1.Alignment = System.Drawing.StringAlignment.Center

            legend1.BackColor = System.Drawing.Color.Transparent
            legend1.BorderColor = System.Drawing.Color.Black
            legend1.BorderWidth = 1

            ' Add the Legend to the Chart
            chart1.Legends.Add(legend1)

            ' Set the Series properties
            series1.BorderColor = System.Drawing.Color.DarkSlateGray
            series1.Name = "Series1"
            series1.ChartType = SeriesChartType.SplineArea

            series2.BorderColor = System.Drawing.Color.DarkSlateGray
            series2.Name = "Series2"
            series2.ChartType = SeriesChartType.Column


            series3.Name = "Series3"
            series3.BorderWidth = 3
            series3.ChartType = SeriesChartType.Spline

            ' Add the Series to the Chart
            chart1.Series.Add(series1)
            chart1.Series.Add(series2)
            chart1.Series.Add(series3)

            ' Add points to each series.
            Dim rnd As New Random()

            'For Each ser As Series In chart1.Series
            'For i As Integer = 0 To 12
            'ser.Points.AddY(rnd.[Next](5, 40))
            'Next
            'Next


            'chart1.DataSource = dt
            'chart1.DataBind()

            'GridView1.DataSource = dt
            'GridView1.DataBind()
            Dim oGridView As New GridView
            'oGridView.DataSource = dt
            'First get the Aggregate function
            Dim oAggregate As AggregateFunction
            If sAggregate = "Count" Then
                oAggregate = AggregateFunction.Count
            ElseIf sAggregate = "Sum" Then
                oAggregate = AggregateFunction.Sum
            ElseIf sAggregate = "First" Then
                oAggregate = AggregateFunction.First
            ElseIf sAggregate = "Last" Then
                oAggregate = AggregateFunction.Last
            ElseIf sAggregate = "Average" Then
                oAggregate = AggregateFunction.Average
            ElseIf sAggregate = "Max" Then
                oAggregate = AggregateFunction.Max
            ElseIf sAggregate = "Min" Then
                oAggregate = AggregateFunction.Min
            ElseIf sAggregate = "Exists" Then
                oAggregate = AggregateFunction.Exists
            End If

            Dim dt As DataTable = ExcelLayer.GetDataTable("_Data\DataForPivot.xls", "Sheet1$")
            Dim pvt As New Pivot(dt)
            oGridView.DataSource = pvt.PivotData(RowFields, DataField, oAggregate, ColumnFields)
            oGridView.DataBind()
            Me.Table1.Rows(oRow).Cells(oColumn).Controls.Add(oGridView)
            oGridView.Visible = True
            ' MsgBox(oGridView.Rows(0).Cells.Count.ToString)

       
            Dim oData As Double
            'SO LOOP THROUGH ALL THE NUMERIC CELLS AND PLOT ON A CHART
            For Each ser As Series In chart1.Series
                'ser.Label = ser.Name
                For r As Integer = 0 To oGridView.Rows.Count - 1
                    For c As Integer = 1 To oGridView.Rows(0).Cells.Count - 1
                        'only add a point if the item is numeric
                        If IsNumeric(oGridView.Rows(r).Cells(c).Text) Then
                            oData = CDbl(oGridView.Rows(r).Cells(c).Text)
                            'ser.Points.Add(oData)
                            ser.Points.AddY(oData)
                        End If
                    Next
                Next
            Next

            Me.Table1.Rows(oRow).Cells(oColumn).Controls.Add(chart1)
            'Only show GridView if specified
            If blnShow_Data_With_Chart = True Then
                oGridView.Visible = True
            End If

            'Preserve the chart's state during callbacks
           
        End If



    End Sub
0
Comment
Question by:Murray Brown
2 Comments
 
LVL 7

Accepted Solution

by:
XGIS earned 2000 total points
ID: 39847224
Hello Murbro..
According to this post they had success getting those labels to display... maybe it will work for you too..  xtremevbtalk

Here is a sample that shows the labels in action... VB Sample 2
0
 

Author Closing Comment

by:Murray Brown
ID: 39847237
Thanks
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…
Suggested Courses
Course of the Month15 days, 9 hours left to enroll

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question