【KBJ10012】積層型柱状チャートの凡例の表示順をチャート要素に合わせるには

0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター

トップ 10 投稿者 
投稿 26
IG Employee
[IG] 池原 大然 投稿済み: 2009/10/2 16:18
【概要】
積層型柱状チャートを使用した場合、チャート要素の表示順と凡例の表示順が異なります。これはチャート要素が下から上に向かって描画されることが原因です。この問題を解決するためには反対順に凡例を表示させるロジックを実装する必要があります。
 
【該当するコンポーネント】
UltraWinChart
 
【該当するバージョン】
全てのバージョン
 
【記事の種類】
How-to
 
【詳細】
1. 新しいアプリケーションを作成し、チャートをフォームに追加します。
2. チャートにバインドするデータを作成します。
3. チャートタイプをStackColumnChart と設定し、ColorModel.Skin に表示色の追加を行います。
4. ChartDrawItem イベントにて通常とは逆の表示色の順序を設定します。
In VB.NET:
PrivateSub UltraChart1_ChartDrawItem(ByVal sender AsObject, ByVal e As Infragistics.UltraChart.Shared.Events.ChartDrawItemEventArgs) Handles UltraChart1.ChartDrawItem
        ' Box プリミティブが描画されるかを判定します。
        If (TypeOf e.Primitive Is Infragistics.UltraChart.Core.Primitives.Box) Then
            'Box プリミティブがデータを保持しているか確認します。
            If e.HasData Then
                e.Primitive.PE.FillGradientStyle = GradientStyle.None
                ' 凡例がどうかを判定し、表示色を決定します。
                If (e.Primitive.Path = "Border.Title.Legend") Then
                    e.Primitive.PE.FillGradientStyle = GradientStyle.None
                    e.Primitive.PE.Fill = Me.colors(System.Math.Abs(_numericColumns - 1 - e.Primitive.Column))
                EndIf
            EndIf
        EndIf
    EndSub
  
In C#:
    privatevoid ultraChart1_ChartDrawItem(object sender, Infragistics.UltraChart.Shared.Events.ChartDrawItemEventArgs e)
    {
        // Box プリミティブが描画されるかを判定します。
        if (e.Primitive is Infragistics.UltraChart.Core.Primitives.Box)
        {
            // Box プリミティブがデータを保持しているか確認します。
            if (e.HasData)
            {
                e.Primitive.PE.FillGradientStyle = Infragistics.UltraChart.Shared.Styles.GradientStyle.None;
                // 凡例がどうかを判定し、表示色を決定します。
                if (e.Primitive.Path == "Border.Title.Legend")
                {
                    e.Primitive.PE.FillGradientStyle = Infragistics.UltraChart.Shared.Styles.GradientStyle.None;
                    e.Primitive.PE.Fill = this.colors[System.Math.Abs(numericColumns-1 - e.Primitive.Column)];
                }
            }
        }
    }
 
5. IRenderLabel  インターフェィスを実装します
In VB.NET:

    Public Class labels
        Implements IRenderLabel
 
        Private _dt As DataTable
        Private _columns As Integer
 
        Public Sub New(ByVal dt As DataTable)
            _dt = dt
        End Sub
 
        Public Overloads Function ToString(ByVal Context As System.Collections.Hashtable) As String Implements Infragistics.UltraChart.Resources.IRenderLabel.ToString
            ' Column インデックスを基にラベル文字列を設定します。
            Dim ColumnIndex As Int16 = System.Math.Abs(_dt.Columns.Count - 1 - CType(Context("DATA_COLUMN"), Integer))
            Return _dt.Columns(ColumnIndex).ColumnName
        End Function
    End Class
 
In C#:
    public class labels : IRenderLabel
    {
        private DataTable _dt;
        public labels(DataTable dt)
        {
            _dt = dt;
        }
        #region IRenderLabel Members
 
        public string ToString(System.Collections.Hashtable Context)
        {
            // Column インデックスを基にラベル文字列を設定します。
            return _dt.Columns[Math.Abs(_dt.Columns.Count-1 - (int)Context["DATA_COLUMN"])].ColumnName;
        }
        #endregion
    }
 
6. 数値列の個数を判定するメソッドを実装します。
7. チャートにデータをバインドし、カスタムラベルを設定します。
ページ 1 / 1 (1 項目) | RSS
Infragistics Japan
インフラジスティックス ジャパン