我有以下代码,原始代码是:here
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dtTest As DataTable = New DataTable
dtTest.Columns.Add("col1", GetType(Integer))
dtTest.Columns.Add("col2", GetType(Integer))
dtTest.Columns.Add("col3", GetType(String))
dtTest.Rows.Add(0, 1, "S")
dtTest.Rows.Add(0, 1, "H")
dtTest.Rows.Add(80, 1, "C")
dtTest.Rows.Add(43, 2, "S")
dtTest.Rows.Add(11, 2, "H")
dtTest.Rows.Add(55, 2, "C")
dtTest.Rows.Add(30, 3, "S")
dtTest.Rows.Add(85, 3, "H")
dtTest.Rows.Add(53, 3, "C")
dtTest.Rows.Add(55, 4, "S")
dtTest.Rows.Add(55, 4, "H")
dtTest.Rows.Add(11, 4, "C")
Dim dv As DataView = New DataView(dtTest)
dv.Sort = "col2 asc"
Chart1.Series.RemoveAt(0) 'this is just to remove the default Series in a
'VB.NET chart; you may not need this
Chart1.DataBindCrossTable(dv, "col3", "col2", "col1", "Label=col1")
For Each cs As Series In Chart1.Series
cs.ChartType = SeriesChartType.StackedColumn
Next
End Sub
End Class
代码生成下面的图表..我想知道如果有一种方法不在列上显示值,如果它为零,如左侧最左列所示或列顶部的总值也会很好。我发现如何在excel中做到这一点,但没有设法实现这个程序。
非常感谢您的帮助
答案 0 :(得分:2)
您需要为系列设置Filtering,我可以使用Filter(CompareMethod,Double,Series)以及DataManipulator.FilterSetEmptyPoints和DataManipulator.FilterMatchPoints获得您要查找的结果属性。
修改后的代码
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dtTest As DataTable = New DataTable
dtTest.Columns.Add("col1", GetType(Integer))
dtTest.Columns.Add("col2", GetType(Integer))
dtTest.Columns.Add("col3", GetType(String))
dtTest.Rows.Add(0, 1, "S")
dtTest.Rows.Add(0, 1, "H")
dtTest.Rows.Add(80, 1, "C")
dtTest.Rows.Add(43, 2, "S")
dtTest.Rows.Add(11, 2, "H")
dtTest.Rows.Add(55, 2, "C")
dtTest.Rows.Add(30, 3, "S")
dtTest.Rows.Add(85, 3, "H")
dtTest.Rows.Add(53, 3, "C")
dtTest.Rows.Add(55, 4, "S")
dtTest.Rows.Add(55, 4, "H")
dtTest.Rows.Add(11, 4, "C")
Dim dv As DataView = New DataView(dtTest)
dv.Sort = "col2 asc"
Chart1.Series.RemoveAt(0) 'this is just to remove the default Series in a
'VB.NET chart; you may not need this
Chart1.DataManipulator.FilterSetEmptyPoints = True 'Points that match filter will be marked as empty
Chart1.DataManipulator.FilterMatchedPoints = True 'Filter points that match Filter criteria
Chart1.DataBindCrossTable(dv, "col3", "col2", "col1", "Label=col1")
For Each cs As Series In Chart1.Series
Chart1.DataManipulator.Filter(DataVisualization.Charting.CompareMethod.EqualTo, 0, cs) 'Compare if equal to zero
cs.ChartType = SeriesChartType.StackedColumn
Dim dpcp As DataPointCustomProperties = New DataPointCustomProperties
Next
End Sub
<强>结果强>