UltraChart中如何自定义标签?

      我们生成的ColumnChart,正常情况下X轴上既包括所绑定数值列名称,又包括Series的名称。而相同的数据,在Excel图表中所生成图表,X轴上通常只会显示Series的名称,并不包含所绑定数值列名称。这种情况下,我们要得到后者那样的效果,可通过以下代码方便的控制实现:

         this.UltraChart1.Axis.X.Labels.Visible = false;

         this.UltraChart1.Axis.X.Labels.SeriesLabels.Visible = true;

     通过设置属性,可很方便的对标签显示样式进行设置,如果我们要自定义ColumnChart或其它图表的的标签,显示特定的信息,采用简单的属性设置没法达成目的,该怎么实现呢?大致说来我们要实现IRenderLabel接口以自定义标签显示格式,然后设置X轴的标签显示格式为我们所定义的样式。

      IRenderLabel接口只有一个成员ToString(Hashtable context)contest包含了要处理标签的信息,如context["ITEM_LABEL"]代表列名,context["DATA_VALUE"]代表特定行列的具体值。ToString(Hashtable context)的返回值将被写到标签上,例如其返回值总是“Hello world,则“Hello world”将重复显示在X轴线上。以下代码具体实现了IRenderLabel接口。

using Infragistics.UltraChart.Resources;

...

public class MyLabelRenderer : IRenderLabel

{

    public string ToString(Hashtable context)

    {

           double dataValue = (double)context["DATA_VALUE"];

           if (dataValue > 75)

                  return dataValue.ToString() + " [Very High]";

           else if (dataValue > 50)

                  return dataValue.ToString() + " [High]";

           else if (dataValue > 25)

                  return dataValue.ToString() + " [Medium]";

           else if (dataValue >= 0)

                  return dataValue.ToString() + " [Low]";

           else        

                  return dataValue.ToString() + " [Negative]";

    }

}

然后我们所要做的就是设置图表轴线的ItemFormatString为一特定字符,此字符不能与图表已有名称相冲突,并且此字符要包含在"<" ">"字符间;然后要创建一Hashtable实例,其键名称与设置的图表轴线的ItemFormatString一致,键值是实现IRenderLabel接口的类实例;最后我们要设置图表的LabelHash属性为Hashtable实例,具体实现代码如下:

           this.ultraChart1.Axis.Y.Labels.ItemFormatString = "<MY_VALUE>";

           this.ultraChart1.Axis.X.Labels.ItemFormatString = "<MY_VALUE>";

           Hashtable MyLabelHashTable = new Hashtable();

           MyLabelHashTable.Add("MY_VALUE", new MyLabelRenderer());

           this.ultraChart1.LabelHash = MyLabelHashTable;

           this.ultraChart1.DataSource = GetColumnData();

最终我们所得到的图形效果参见图1

 

图1 自定义轴线标签效果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章