自定义DevExpress图表控件的系列点标签值

问题描述:

我想用从绑定到图表的完全相同的数据源获得的属性来定制每个系列点值。为了说明我的问题,我将使用相同的例子的DevExpress在他们website确实为图表数据绑定:自定义DevExpress图表控件的系列点标签值

public class Record { 
    int id, age; 
    string name; 
    public Record(int id, string name, int age) { 
     this.id = id; 
     this.name = name; 
     this.age = age; 
    } 
    public int ID { 
     get { return id; } 
     set { id = value; } 
    } 
    public string Name { 
     get { return name; } 
     set { name = value; } 
    } 
    public int Age { 
     get { return age; } 
     set { age = value; } 
    } 
} 

填补了图表,它使用下面的代码块:

private void Form1_Load(object sender, EventArgs e) { 
    // Create a list. 
    ArrayList listDataSource = new ArrayList(); 

    // Populate the list with records. 
    listDataSource.Add(new Record(1, "Jane", 19)); 
    listDataSource.Add(new Record(2, "Joe", 30)); 
    listDataSource.Add(new Record(3, "Bill", 15)); 
    listDataSource.Add(new Record(4, "Michael", 42)); 

    // Bind the chart to the list. 
    ChartControl myChart = chartControl1; 
    myChart.DataSource = listDataSource; 

    // Create a series, and add it to the chart. 
    Series series1 = new Series("My Series", ViewType.Bar); 
    myChart.Series.Add(series1); 

    // Adjust the series data members. 
    series1.ArgumentDataMember = "name"; 
    series1.ValueDataMembers.AddRange(new string[] { "age" }); 

    // Access the view-type-specific options of the series. 
    ((BarSeriesView)series1.View).ColorEach = true; 
    series1.LegendPointOptions.Pattern = "{A}"; 
} 

产生的代码的图是:

Resulting chart

我的问题是,我怎么能使用例如财产ID为每个系列标签点添加额外信息? (例如{ID +“ - ”+ Age})在上图中,我们将得到这些标签数据点:“1-19”,“2-30”,“3-15”和“4-42”。

从代码的外观,这将从Record对象内完成。

Age参数是一个整数,并与图表标签匹配。要更改该标签,请更改您所指的内容。

创建一个新的属性withing,看起来像这样的记录对象:

public string ChartLabel 
{ get { return String.Format("{0} - {1}", ID, Age); } } 

它是一个得到唯一的财产......那么你会更改图表的代码如下所示:

series1.ArgumentDataMember = "name"; 
series1.ValueDataMembers.AddRange(new string[] { "ChartLabel" }); 

这应该会改变图表中显示的内容。

+0

由于“LineSeriesView”图表值数据成员的类型与数字比例不兼容,因此无法工作。 – GoRoS 2013-05-06 20:21:42

我建议你用你的图表控件CustomDrawSeriesPoint,这里是如何:

private void chartControl1_CustomDrawSeriesPoint(object sender, CustomDrawSeriesPointEventArgs e) 
{ 
    // Get the value of your point (Age in your case) 
    var pointValue = e.SeriesPoint.Values[0]; 

    // You can get the argument text using e.SeriesPoint.Argument 
    // Set the label text of your point 
    e.LabelText = "value is " + pointValue; 
} 

的链接,可以帮助:Click me

+0

请再次阅读问题,并注意我想获得什么。这不仅仅是在每个点之前添加“价值是”,为此我只使用'LegendPointOptions.Pattern'。 – GoRoS 2013-05-07 16:14:28

+0

是的,我知道,为此我提到可以获得点参数(记录名称)并使用它来获取记录的标识,并将两者(标识和年龄)合并以获得所需的标签。如果有两个具有相同名称的记录,则可以遍历点值。 – SidAhmed 2013-05-07 16:42:11

+0

由于性能方面的原因,我建议你使用字典 – SidAhmed 2013-05-07 16:43:11

使用LegendPoint选择它带来传说中的文本都参数和值。

series1.LegendPointOptions.PointView = PointView.ArgumentAndValues;