我们生成的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: