【问题标题】:Can not add Datatable Elements in a new Datatable in C#无法在 C# 的新数据表中添加数据表元素
【发布时间】:2015-04-10 10:03:01
【问题描述】:

我正在尝试使用此方法在数据表中添加元素。 我收到此错误:

System.Data.dll 中出现“System.IndexOutOfRangeException”类型的未处理异常

附加信息:位置 0 处没有行。

public DataTable slope(DataTable createPath)
{
    DataTable slopes = new DataTable(); 
    slopes.Columns.Add("Slope Line 1", typeof(double));
    slopes.Columns.Add("Slope Line 2", typeof(double));
    slopes.Columns.Add("Direction 1", typeof(string));
    slopes.Columns.Add("Direction 2", typeof(string));
    for (int i = 2; i < createPath.Rows.Count; i++)
    {
        slopes.Rows[i - 2][0] = Math.Atan2((Convert.ToDouble(createPath.Rows[i - 1][2]) - Convert.ToDouble(createPath.Rows[i - 2][2])),
            (Convert.ToDouble(createPath.Rows[i - 1][1]) - Convert.ToDouble(createPath.Rows[i - 2][1])));            

        slopes.Rows[i - 2][1] = Math.Atan2((Convert.ToDouble(createPath.Rows[i][2]) - Convert.ToDouble(createPath.Rows[i - 1][2])),
            (Convert.ToDouble(createPath.Rows[i][1]) - Convert.ToDouble(createPath.Rows[i - 1][1])));
    }

    for (int j = 0; j < slopes.Rows.Count; j++ )
    {
        for (int k=0; k<2; k++)
        {
            if ( Convert.ToDouble(slopes.Rows[j][k])== 0)
                slopes.Rows[j][k + 2] = "Straight Right";
            else if (Convert.ToDouble(slopes.Rows[j][k]) == Math.PI)
                slopes.Rows[j][k + 2] = "Straight Left";
            else if (Convert.ToDouble(slopes.Rows[j][k]) == (Math.PI / 2))
                slopes.Rows[j][k + 2] = "Straight Up";
            else if (Convert.ToDouble(slopes.Rows[j][k]) == -(Math.PI / 2))
                slopes.Rows[j][k + 2] = "Straight Down";
            else 
                slopes.Rows[j][k + 2] = "Slant";
        }
    }
    return slopes;
}

【问题讨论】:

  • slopes 表为空。您没有向其中添加行
  • 这就是我想要做的,在 for 循环中

标签: c# datatable


【解决方案1】:

您应该在尝试像这样slopes.Rows[i - 2] 访问它们之前将行添加到slopes 表中

for (int i = 2; i < createPath.Rows.Count; i++)
{
    var row = slopes.NewRow();
    row[0] = Math.Atan2((Convert.ToDouble(createPath.Rows[i - 1][2]) - Convert.ToDouble(createPath.Rows[i - 2][2])),
        (Convert.ToDouble(createPath.Rows[i - 1][1]) - Convert.ToDouble(createPath.Rows[i - 2][1])));


    row[1] = Math.Atan2((Convert.ToDouble(createPath.Rows[i][2]) - Convert.ToDouble(createPath.Rows[i - 1][2])),
        (Convert.ToDouble(createPath.Rows[i][1]) - Convert.ToDouble(createPath.Rows[i - 1][1])));
    slopes.Rows.Add(row);
}

【讨论】:

    【解决方案2】:
    slopes.Rows.Add(What you are adding);
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2015-09-30
      • 1970-01-01
      • 2021-08-10
      • 2021-01-21
      • 2023-02-03
      相关资源
      最近更新 更多