0

如何在图表控件的 x 轴上显示字符串值?数据点 (x & y) 都是双倍的。我有一个 IEnumerable 包含具有 2 个属性的对象列表。报告的名称和一个整数值,表示它运行了多少次。所以整数在 y 轴上,报告名称在 x 轴上。但我似乎对值类型只有双重选择。所以当我创建我的数据点时,我得到了一个错误

DataPoint p1 = new DataPoint();
p1.XValue = log.ReportName; ---> this is invalid
p1.YValues = new Double[] { log.ReportTotal };

如何才能做到这一点 ?

我试过这个

reportTotal.XValueType = ChartValueType.String;

当我绘制我的数据点时,我已经做到了

        int i = 1;
        foreach (var log in this._reportLogs)
        {
            DataPoint p1 = new DataPoint();
            p1.XValue = (double)i;
            p1.YValues = new Double[] { log.ReportFrequency };
            i++;
            reportTotal.Points.Add(p1);

        }

但是现在所有我沿着 x 轴得到的都是 i 变量的数量,我到底怎么才能得到 text 属性的内容?

这就是我让它工作的方式

Dictionary<string, int> ReportLogs = new Dictionary<string, int>();

foreach (var log in this._reportLogs)
      ReportLogs.Add(log.ReportName, log.ReportFrequency);

foreach (KeyValuePair<string, int> log in ReportLogs)
       reportTotal.Points.AddXY(log.Key, log.Value);
4

1 回答 1

0

沿轴的标签是从 x 值创建的,它们的数量可以在它们适合时自动确定,也可以通过设置Intervalx 轴的属性来确定。

所以他们的位置不一定与实际相符DataPoints

而且您可以格式化它们,但只能在正常的格式化规则内,即您无法使用表达式将数字转换为自定义字符串,这似乎正是您想要的:根据其编号显示报告名称。

其他示例可能是根据邮政编码显示城市或根据 emp.ID 显示人名。

要获得完全控制,您可能需要使用CustomLabels。它们有点棘手,但非常有用。有关大量示例,请参阅其中几个帖子!

另请注意:如果您将 x 值类型更改为字符串(这可能的 : yourseries.XValueType = ChartValueType.String)这些字符串将直接显示,但您会丢失实际的 x 值!通常不推荐(但在您的情况下可能没问题)!

因此,如果您愿意,可以做到;但是您不能像以前那样准备 DataPoint。相反,您需要使用该Points.AddXY方法。

这会将字符串转换为双精度(结果为零)并将字符串复制到标签中..:

  reportTotal.Points.AddXY(log.ReportName, new Double[] { log.ReportTotal });

更新

另一种方法是设置AxisLabeleach DataPoint。要显示所有这些,您可能需要设置yourxaxis.Interval = 1.

所以在你的循环中只需添加

p1.AxisLabel = log.ReportName;
于 2018-03-02T10:15:41.160 回答