【问题标题】:Nested foreach of datatable to xydataseries将数据表的 foreach 嵌套到 xydataseries
【发布时间】:2017-11-15 19:45:58
【问题描述】:

我有一个datatable,它是通过合并多个其他人创建的,数据最初来自导入的 excel 文件。我基本上有值列,尽管列和名称的数量事先是未知的,并且前两列总是被忽略。

我正在尝试为我的datatable 的每一列创建一个xydataseries<double, double>() where; x 是从 1 开始的递增整数,y = 列数据。我已经在点击事件(wpf)上尝试过这个;

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        foreach (DataColumn i in dt.Columns)
        {
            var x = 1;
            var series = new XyDataSeries<double, double>();
            foreach (DataRow j in dt.Rows)
            {
                Convert.ToDouble(j);
                series.Append(x++,j);
            }
        }
    }

但我在 j 的最后一行出现错误 - 无法从 'System.Data.DataRow' 转换为 'double'。

我是 c# 和一般编程的新手,感谢您的帮助。

【问题讨论】:

  • 使用j[i] 访问单元格。 msdn.microsoft.com/en-us/library/5akhx035(v=vs.110).aspx - 这比可以转换为双倍。
  • 我得到一个错误,'cannot convert from object to double' 当我这样做 - Convert.ToDouble(j[i]); series.Append(one++, j[i]);
  • 您必须将转换后的值传递给第二行,将您的代码更改为var d = Convert.ToDouble(j[i]); series.Append(x++, d);

标签: c# wpf datatable


【解决方案1】:

您看到的错误是将 DataRow 对象作为参数传递给 series.Append 的结果,当它需要双精度时。这是因为 Convert.ToDouble 返回一个双精度数,这意味着您必须将结果分配给一个新变量才能使用它。原始 j 变量保持不变。要获得双倍,您必须这样做:

double newDouble = Convert.ToDouble(j);

但是这会出错,因为 Convert.ToDouble 仅适用于实现 IConvertible 接口的对象(DataRow 没有)。假设 DataRow 中的值是您实际需要的值,您可以使用列索引检索此值

double newDouble = Convert.ToDouble(j[2]);

或按列名

double newDouble = Convert.ToDouble(j["ColumnName"]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多