1

我想使用从绑定到图表的相同数据源获得的属性来自定义每个系列点值。为了说明我的问题,我将使用与 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}";
}

代码的结果图表是:

结果图表

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

4

3 回答 3

4

我建议您使用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;
}

可能有帮助的链接:点击我

于 2013-05-07T16:05:47.063 回答
0

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

series1.LegendPointOptions.PointView = PointView.ArgumentAndValues;

于 2014-01-18T12:04:46.707 回答
0

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

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

使用如下所示的 Record 对象创建一个新属性:

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

它是一个只能获取的属性...然后您可以像这样更改图表代码:

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

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

于 2013-05-06T19:38:33.567 回答