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

时间:2013-05-06 18:28:13

标签: c# .net charts devexpress

我想使用从绑定到图表的相同数据源获取的属性来自定义每个系列点值。为了说明我的问题,我将使用与DevExpress在website中用于图表数据绑定的相同示例:

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 +“ - ”+年龄})在上图中,我们将得到这些标签数据点:“1 - 19”,“2 - 30”,“3 - 15”和“4 - 42”。

3 个答案:

答案 0 :(得分:3)

我建议您使用图表控件的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

答案 1 :(得分:0)

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

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

使用看起来像这样的Record对象创建一个新属性:

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

它只是一个获取属性...然后你会像这样更改图表代码:

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

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

答案 2 :(得分:0)

使用LegendPoint选项,它会在图例文本中带来参数和值。

series1.LegendPointOptions.PointView = PointView.ArgumentAndValues;