2 votes

Afficher la valeur de l'étiquette du graphique de la colonne d'empilement uniquement si elle n'est pas égale à zéro ?

J'ai le code suivant, le code original est : aquí

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

Le code génère le graphique ci-dessous Ce que je veux savoir, c'est s'il y a un moyen de ne pas afficher une valeur dans une colonne si elle est nulle, par exemple dans la colonne la plus à gauche OU la valeur totale en haut de la colonne serait aussi bien. J'ai trouvé comment faire cela dans excel mais je n'ai pas réussi à le faire pour ce programme.

Merci beaucoup pour votre aide

Result

2voto

Mark Hall Points 29473

Vous devrez configurer Filtrage pour votre Série, j'ai pu obtenir le résultat que vous recherchiez en utilisant la fonction Filter(CompareMethod,Double,Series) ainsi que DataManipulator.FilterSetEmptyPoints y DataManipulator.FilterMatchPoints Propriétés.

Code modifié

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

Résultat

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X