为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
PIPIONE 2022-10-23 13:40:57
使用从 csv 文件中读取数据并将数据添加到 Datagridview 的 Windows 窗体应用程序。我遇到了将所有行添加到数据表并显示在数据网格视图上的问题。datagridview 仅显示前两个 if 条件和 OneRow if 条件的数据行。如果 dataable 和 datagridview 行填充了 OneRow if 条件行,它将不会添加来自 twoRow if 条件的行。但我希望显示 OneRow 和 TwoRow 中的行。当我在 OneRow if 条件中注释(/**/)时,来自 TwoRow 的行也会填充数据表和 datagridview。但我需要两者来填充表格。提前致谢!        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];         }       }
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

无法添加评论,因为我没有足够的业力,所以我在这里问我的问题:所以,如果我理解你的问题,你不能从一个 .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);


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信