2012-11-29 30 views
2

我有下面的代码,原来的代码是: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 

代码生成见下表..我想知道是否有一种方法不显示在列中的值是否为0,就像上所示在列顶部最左边的列或总值也是好的。我发现如何在Excel中做到这一点,但没有设法达到这个程序。

非常感谢帮助

Result

回答

2

您需要设置Filtering你的系列,我能得到你使用Filter(CompareMethod,Double,Series)寻找结果,DataManipulator.FilterSetEmptyPointsDataManipulator.FilterMatchPoints属性沿。

改进型Code

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 

结果

enter image description here