我需要帮助将两个不同的行(具有相同的列)添加到同一个数据表

奥卢吉德·奥卢德

使用 Windows 窗体应用程序从 csv 文件中读取数据并将数据添加到 Datagridview。我遇到了将所有行添加到数据表并显示在数据网格视图上的问题。datagridview 仅显示来自前两个 if 条件和 OneRow if 条件的数据行。如果 dataable 和 datagridview 行填充有 OneRow if 条件行,则不会添加来自 twoRow if 条件的行。但我希望显示来自 OneRow 和 TwoRow 的行。当我注释 (/**/) OneRow if 条件时,来自 TwoRow 的行也会填充数据表和数据网格视图。但我需要两者来填充表格。提前致谢!

        Construct.MainDataTable.Columns.Add("Date", typeof(DateTime));
        Construct.MainDataTable.Columns.Add("Time");
        Construct.MainDataTable.Columns.Add("Serial");
        Construct.MainDataTable.Columns.Add("Type");
        Construct.MainDataTable.Columns.Add("level");
        Construct.MainDataTable.Columns.Add("price");
        Construct.MainDataTable.Columns.Add(" Limit");
        Construct.MainDataTable.Columns.Add("last Limit");
        Construct.MainDataTable.Columns.Add("Data");
        ..........................
    ...............................................
        DataRow oneRow = Construct.MainDataTable.NewRow();
        DataRow twoRow = Construct.MainDataTable.NewRow();
        dataGridView2.AllowUserToAddRows = false;

        if (line.Split(',')[2].Equals("Time"))
        {
         time = line.Split(',')[3];
         date = line.Split(',')[1];
         }
        if (line.Split(',')[2].Equals("Level"))
        {
         level = line.Split(',')[3];

         }
        //OneROw(IF condition)
        if ((Convert.ToDecimal(line.Split(',')[8])) < (Convert.ToDecimal     (line.Split(',')[12]))) 
        {

          type = line.Split(',')[1];
          serial = line.Split(',')[7];
          price = line.Split(',')[3];
          Limit = line.Split(',')[8];
          lastLimit = line.Split(',')[10];
          Data = line.Split(',')[12];

          oneRow["Date"] = date;
          oneRow["Time"] = time;
          oneRow["Serial"] = serial;
          oneRow["Type"] = type;
          oneRow["level"] = level;
          oneRow["price"] = price;
          oneRow[" Limit"] = Limit;
          oneRow["last Limit"] = lastlimit;
          oneRow["Data"] = Data;
          Construct.MainDataTable.Rows.Add(oneRow);
         }  
       //TwoROw(IF condition)                             
        if ((line.Contains('"')) && ((line.Contains("NG"))))
        {
          price = line.Split(',')[3];
          type = line.Split(',')[1];
          serial = line.Split(',')[7];
          Limit = line.Split('"')[7];
          var valLimit = Limit.Split(',').Select(a => Convert.ToInt32(a, 16));
          var limitJoin = String.Join(",", valLimit);
          lastlimit = line.Split('"')[1];
          var vallastLimit = lastlimit.Split(',').Select(d => Convert.ToInt32(d, 16));
          var lastJoin = String.Join(",", vallastLimit);
          Data = line.Split('"')[5];
          var valDatas = Data.Split(',').Select(s => Convert.ToInt32(s, 16));
          var dataJoin = String.Join(",", valDatas);
          twoRow["Date"] = date;
          twoRow["Time"] = time;
          twoRow["Serial"] = serial;
          twoRow["Type"] = type;
          twoRow["level"] = level;
          twoRow["price"] = price;
          twoRow["Limit"] = limitJoin;
          twoRow["last Limit"] = lastJoin;
          twoRow["Data"] = dataJoin;
          Construct.MainDataTable.Rows.Add(twoRow);
          }
         dataGridView2.DataSource = Construct.MainDataTable;
莱姆

无法添加评论,因为我没有足够的业力,所以我在这里问我的问题:所以,如果我理解你的问题,如果一个 .csv 文件有多于一行,你就不能从一个 .csv 文件添加数据?为什么在 .csv 文件中为行使用 2 个不同的 if 条件?

如果行中有空数据,没关系,您仍然可以将它们放置到 DataTable 列中,因此您可以使用循环将 .csv 中的数据添加到 DataTable。尝试这样的事情:

    public static DataTable CsvToDataTable(string csv)
    {
        DataTable dt = new DataTable();
        string[] lines = csv.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
        Regex onlyDeimiterComma = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

        for (int i = 0; i < lines.Length; i++)
        {
            DataRow row = dt.NewRow();
            string[] cells = onlyDeimiterComma.Split(lines[i]);

            for (int j = 0; j < cells.Length; j++)
            {
                if (i == 0)
                { 
                    if (j == 0)
                    {
                        dt.Columns.Add(cells[j], typeof(DateTime));
                    }
                    else
                    {
                        dt.Columns.Add(cells[j]);
                    }                   
                }
                else
                {
                    row[j] = cells[j];
                }
            }

            dt.Rows.Add(row);
        }

        return dt;
    }

只需在代码中的任何位置调用此方法,并为其提供从 .csv 文件中读取的字符串。您可以尝试在此处编译此代码,看看它如何处理具有不同数据(空列、带引号的文本、带引号的逗号)的 .csv 数据

UPD:如果您需要从两个不同的 .csv 文件填充 DataTable,您仍然可以使用上面的代码。只需为两个文件调用两次,然后合并两个 DataTable,如下所示:

DataTable dt = CsvToDataTable(csvFileOne);
DataTable dtTwo = CsvToDataTable(csvFileTwo);
dt.Merge(dtTwo);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有相同WHERE子句的同一个表上的两个不同查询

来自分类Dev

将范围行从一个数据表添加到另一个

来自分类Dev

将范围行从一个数据表添加到另一个

来自分类Dev

将两个不同 columnName 的数据表连接成一个数据表

来自分类Dev

将两个数据表中的值加到一个新的数据表中

来自分类Dev

根据来自另一个数据框的两个行值的对应值将列添加到数据框

来自分类Dev

使用列的值将数据表中的数据添加到另一个数据表

来自分类Dev

合并具有相同列但两个都具有一些空单元格的两个数据表

来自分类Dev

同一个excel表中的两个数据透视表

来自分类Dev

具有来自不同模型的数据但显示在同一个视图上的两个部分视图

来自分类Dev

两个具有相同名称的类可以跨两个不同的程序集位于同一个命名空间中吗?

来自分类Dev

SQL Server 查询从同一个表中提取两个不同的行

来自分类Dev

想要连接到同一个数据库表但具有不同的值

来自分类Dev

将具有相同时间范围的两个时间序列数据添加到单个数据帧或xts数据的最佳方法

来自分类Dev

将两个数据集合并为一个,并获得具有相同属性的列的均值

来自分类Dev

将具有 2 个不同值的行复制到同一个表中

来自分类Dev

c#如何通过使用ItemArray将两个数据行和列合并到一个数据表中?

来自分类Dev

我需要一个查询,当一个字段相同时,它将返回两个表的所有行和所有列

来自分类Dev

根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

来自分类Dev

一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

来自分类Dev

将第二个数据库表添加到查询中,并输出与另一个名称相同的列

来自分类Dev

将一个数据库表中的行插入另一个数据库中的两个不同表中

来自分类Dev

SQL Server查询结果需要在同一源表的两个具有相同名称的列中提供不同的值

来自分类Dev

通过将两个数据表行转换为一个来创建xml

来自分类Dev

将数组中的值添加到php中具有相同ID的另一个数组

来自分类Dev

如何计算小计并将其添加到同一个数据框中?

来自分类Dev

使用PostgreSQL将两个选择查询的结果添加到一个表行中

来自分类Dev

Linq UNION ALL 在同一个数据表上?

来自分类Dev

如何将另一个孩子添加到响应数据表

Related 相关文章

  1. 1

    具有相同WHERE子句的同一个表上的两个不同查询

  2. 2

    将范围行从一个数据表添加到另一个

  3. 3

    将范围行从一个数据表添加到另一个

  4. 4

    将两个不同 columnName 的数据表连接成一个数据表

  5. 5

    将两个数据表中的值加到一个新的数据表中

  6. 6

    根据来自另一个数据框的两个行值的对应值将列添加到数据框

  7. 7

    使用列的值将数据表中的数据添加到另一个数据表

  8. 8

    合并具有相同列但两个都具有一些空单元格的两个数据表

  9. 9

    同一个excel表中的两个数据透视表

  10. 10

    具有来自不同模型的数据但显示在同一个视图上的两个部分视图

  11. 11

    两个具有相同名称的类可以跨两个不同的程序集位于同一个命名空间中吗?

  12. 12

    SQL Server 查询从同一个表中提取两个不同的行

  13. 13

    想要连接到同一个数据库表但具有不同的值

  14. 14

    将具有相同时间范围的两个时间序列数据添加到单个数据帧或xts数据的最佳方法

  15. 15

    将两个数据集合并为一个,并获得具有相同属性的列的均值

  16. 16

    将具有 2 个不同值的行复制到同一个表中

  17. 17

    c#如何通过使用ItemArray将两个数据行和列合并到一个数据表中?

  18. 18

    我需要一个查询,当一个字段相同时,它将返回两个表的所有行和所有列

  19. 19

    根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

  20. 20

    一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

  21. 21

    将第二个数据库表添加到查询中,并输出与另一个名称相同的列

  22. 22

    将一个数据库表中的行插入另一个数据库中的两个不同表中

  23. 23

    SQL Server查询结果需要在同一源表的两个具有相同名称的列中提供不同的值

  24. 24

    通过将两个数据表行转换为一个来创建xml

  25. 25

    将数组中的值添加到php中具有相同ID的另一个数组

  26. 26

    如何计算小计并将其添加到同一个数据框中?

  27. 27

    使用PostgreSQL将两个选择查询的结果添加到一个表行中

  28. 28

    Linq UNION ALL 在同一个数据表上?

  29. 29

    如何将另一个孩子添加到响应数据表

热门标签

归档