Back to Devexpress

DrillDownStateChangingEventArgs.States Property

corelibraries-devexpress-dot-xtracharts-dot-drilldownstatechangingeventargs-1c4cb368.md

latest5.1 KB
Original Source

DrillDownStateChangingEventArgs.States Property

Returns the array of states that specify filtering parameters applied on each detail level.

Namespace : DevExpress.XtraCharts

Assembly : DevExpress.XtraCharts.v25.2.dll

NuGet Package : DevExpress.Charts

Declaration

csharp
public DrillDownItem[] States { get; }
vb
Public ReadOnly Property States As DrillDownItem()

Property Value

TypeDescription
DrillDownItem[]

States that specify filtering parameters applied on each detail level.

|

Remarks

The following example demonstrates how to use the property to change several diagram settings taking into account the current drill down state.

Example

csharp
chartControl.DrillDownStateChanged += this.OnChartControlDrillDownStateChanged;
chartControl.DrillDownStateChanging += this.OnChartControlDrillDownStateChanging;

private void OnChartControlDrillDownStateChanging(object sender, DrillDownStateChangingEventArgs e) {
    if (e.States.Length != 0) {
        object categoryValue = null;
        if (e.States.Last().Parameters.TryGetValue("Category", out categoryValue)) {
            int seriesIndex = chartControl.Series.IndexOf(chartControl.Series[(string)categoryValue]);
            int colorIndex = seriesIndex % chartControl.PaletteRepository[chartControl.PaletteName].Count + 1;
            chartControl.PaletteBaseColorNumber = colorIndex;
        }
        if (chartControl.Diagram is XYDiagram diagram) {
            diagram.AxisX.Label.Font = new Font("Tahoma", 8.25f, FontStyle.Regular);
        }
    } else {
        chartControl.PaletteBaseColorNumber = 0;
        if (chartControl.Diagram is XYDiagram diagram) {
            diagram.AxisX.Label.Font = new Font("Tahoma", 8.25f, FontStyle.Underline);
        }
    }
}
private void OnChartControlDrillDownStateChanged(object sender, DrillDownStateChangedEventArgs e) {
    if (!(chartControl.Diagram is XYDiagram diagram)) return;
    if (e.States.Length == 0) {
        diagram.Rotated = true;
        return;
    }
    diagram.Rotated = IsDrillToSeriesFromHome(e.States);
}
private bool IsDrillToSeriesFromHome(DrillDownItem[] drillDownItems) {
    if (drillDownItems.Length != 1) return false;
    IReadOnlyDictionary<string, object> drillDownParams = drillDownItems[0].Parameters;
    if (drillDownParams.Count != 1) return false;
    return drillDownParams.ContainsKey("Category");
}
vb
AddHandler ChartControl.DrillDownStateChanging, AddressOf OnChartControlDrillDownStateChanging
AddHandler ChartControl.DrillDownStateChanged, AddressOf OnChartControlDrillDownStateChanged

Private Sub OnChartControlDrillDownStateChanging(sender As Object, e As DrillDownStateChangingEventArgs)
    If (e.States.Length <> 0) Then
        Dim categoryValue As Object = Nothing
        If (e.States.Last().Parameters.TryGetValue("Category", categoryValue)) Then
            Dim seriesIndex = ChartControl.Series.IndexOf(ChartControl.Series(CType(categoryValue, String)))
            Dim colorIndex = seriesIndex Mod ChartControl.PaletteRepository(ChartControl.PaletteName).Count + 1
            ChartControl.PaletteBaseColorNumber = colorIndex
        End If
        Dim diagram As XYDiagram = TryCast(chartControl.Diagram, XYDiagram)
        If (diagram IsNot Nothing) Then
            diagram.AxisX.Label.Font = New Font("Tahoma", 8.25f, FontStyle.Regular);
        End If
    Else
        ChartControl.PaletteBaseColorNumber = 0
        Dim diagram As XYDiagram = TryCast(chartControl.Diagram, XYDiagram)
        If (diagram IsNot Nothing) Then
            diagram.AxisX.Label.Font = New Font("Tahoma", 8.25f, FontStyle.Underline);
        End If
    End If
End Sub
Private Sub OnChartControlDrillDownStateChanged(sender As Object, e As DrillDownStateChangedEventArgs)
    Dim diagram As XYDiagram = TryCast(chartControl.Diagram, XYDiagram)
    If (diagram Is Nothing) Then Return
    If (e.States.Length = 0) Then
        diagram.Rotated = true
        Return
    End If
    diagram.Rotated = IsDrillToSeriesFromHome(e.States)
End Sub
Private Function IsDrillToSeriesFromHome(drillDownItems() As DrillDownItem) As Boolean
    If (drillDownItems.Length <> 1) Then Return False
    Dim drillDownParams As IReadOnlyDictionary<String, Object>= drillDownItems(0).Parameters
    If (drillDownParams.Count <> 1) Then Return False
    Return drillDownParams.ContainsKey("Category")
End Function

See Also

DrillDownStateChangingEventArgs Class

DrillDownStateChangingEventArgs Members

DevExpress.XtraCharts Namespace