aspx.vb:
Function CreateChart(ByVal dt As DataTable, ByVal title As String)
Dim chart1 As New SoftwareFX.ChartFX.Internet.Server.Chart
Dim table As DataTable
chart1.AxisY.Gridlines = True
chart1.Titles(0).Text = title
chart1.AxisY.Gridlines = True
chart1.Titles(0).Alignment = System.Drawing.StringAlignment.Center
chart1.Titles(0).Font = New System.Drawing.Font("Times New Roman", 12, System.Drawing.FontStyle.Bold)
chart1.Titles(0).TextColor = System.Drawing.Color.Brown
chart1.Titles(0).Alignment = System.Drawing.StringAlignment.Center
table = ChartTable(dt)
chart1.DataSource = table
Dim count As Integer = table.Columns.Count - 1
Dim i As Integer
For i = 0 To count
If i = count - 2 Or i = (count - 1) Then
chart1.Series(i).Gallery = SoftwareFX.ChartFX.Gallery.Lines '折线
chart1.Series(i).PointLabels = True
chart1.Series(i).PointLabelAlign = SoftwareFX.ChartFX.LabelAlign.Top
If i = (count - 1) Then
chart1.Series(i).Color = System.Drawing.Color.Red
Else
chart1.Series(i).Color = System.Drawing.Color.YellowGreen
End If
Else
chart1.Series(i).CylSides = Short.Parse("35")
chart1.Series(i).PointLabels = False
chart1.Series(i).Volume = Short.Parse("32") '柱子大小
End If
Next
Dim axis As SoftwareFX.ChartFX.Internet.Server.Axis = chart1.AxisY
axis.Min = 0
axis.Max = maxData
axis.LabelsFormat.Format = SoftwareFX.ChartFX.AxisFormat.Number
axis.LabelsFormat.Decimals = 0
'chart1.HtmlTag = ".NET"
chart1.Stacked = SoftwareFX.ChartFX.Stacked.Normal
'chart1.AxisY.AutoScale = True
'chart1.Scrollable = True ' 横轴的scroll
'chart1.AxisX.SetScrollView(20, 40)
chart1.SerLegBox = True '显示颜色标注show legend box
Dim myBorder As SoftwareFX.ChartFX.Borders.ImageBorder 'chart的border s设置
myBorder = New SoftwareFX.ChartFX.Borders.ImageBorder(SoftwareFX.ChartFX.Borders.ImageBorderType.Emboss)
chart1.BackColor = System.Drawing.Color.Beige
chart1.BorderObject = myBorder
chart1.BackColor = System.Drawing.Color.AntiqueWhite '背景颜色
chart1.AxisY.Font = New System.Drawing.Font("Courier New", 9, System.Drawing.FontStyle.Regular) 'Y轴字体
'chart1.PointLabels = True ' 取消数据大小标注
' chart1.DataEditor = True
If table.Rows.Count > 15 Then
chart1.Width = Unit.Pixel(1200)
Else
chart1.Width = Unit.Pixel(800)
End If
chart1.Height = Unit.Pixel(300)
chart1.Visible = True
Panel1.Controls.Add(chart1)
End Function
Function ChartTable(ByVal dt As DataTable) As DataTable
Dim table As New DataTable
Dim dc As DataColumn
Dim dr As DataRow
Dim i, j As Integer
dc = New DataColumn("date")
table.Columns.Add(dc)
For i = 0 To dt.Rows.Count - 1
If String.Equals(dt.Rows(i).Item(2).ToString(), "DPPM") Or String.Equals(dt.Rows(i).Item(2).ToString(), "Overall VLRR") Or String.Equals(dt.Rows(i).Item(2).ToString(), "Target(DPPM)") Then
dc = New DataColumn(dt.Rows(i).Item(1).ToString(), GetType(Int64))
table.Columns.Add(dc)
End If
Next
For i = 3 To dt.Columns.Count - 1
dr = table.NewRow
dr("date") = dt.Columns(i).ColumnName
For Each _dr As DataRow In dt.Rows
For j = 1 To table.Columns.Count - 1
If String.Equals(_dr("NG").ToString(), "Qty") Then
Exit For
Else
If (String.Equals(_dr("defect").ToString(), table.Columns(j).ColumnName) And String.Equals(_dr("NG").ToString(), "DPPM")) Or (String.Equals(_dr("defect").ToString(), table.Columns(j).ColumnName) And String.Equals(_dr("NG").ToString(), "Overall VLRR")) Or (String.Equals(_dr("defect").ToString(), table.Columns(j).ColumnName) And String.Equals(_dr("NG").ToString(), "Target(DPPM)")) Then
dr(table.Columns(j).ColumnName) = _dr(dt.Columns(i).ColumnName)
End If
End If
Next
Next
table.Rows.Add(dr)
Next
Return table
End Function
图片效果: