C# CSV中的行和列出现问题

C# CSV中的行和列出现问题,c#,csv,rows,C#,Csv,Rows,我在将值写入新的CSV文件时遇到了一个大问题 我收到一个csv文件,从中解析所有值。这很好用,我把它放到了datagridview中 我们要对这个文件做的第一件事是重新排列它。目前,有两组标题:一组位于顶部,另一组位于左侧。基本上,我们需要的是另一种方式:将左侧的头放在顶部,将顶部的头放在文件的下方 不过,现在发生的是,下面的代码生成了一个CSV,其中有一行(正确的)列数正确(而不是行,同样正确)。。。但是,表中的所有值都是“1、1、1、1、1、1、1、1、1、1”等 例如: 我得到的文件是这样

我在将值写入新的CSV文件时遇到了一个大问题

我收到一个csv文件,从中解析所有值。这很好用,我把它放到了datagridview中

我们要对这个文件做的第一件事是重新排列它。目前,有两组标题:一组位于顶部,另一组位于左侧。基本上,我们需要的是另一种方式:将左侧的头放在顶部,将顶部的头放在文件的下方

不过,现在发生的是,下面的代码生成了一个CSV,其中有一行(正确的)列数正确(而不是行,同样正确)。。。但是,表中的所有值都是“1、1、1、1、1、1、1、1、1、1”等

例如:

我得到的文件是这样的:

文件:,1,2,3,4,5

a类,9%,10%,11%,12%,13%

b型,9%,10%,11%,12%,13%

c型,9%,10%,11%,12%,13%

d型,9%,10%,11%,12%,13%

我想这样做:

文件:,类型a,类型b,类型c,类型d

1,9%,9%,9%,9%

2、10%、10%、10%、10%

3、11%、11%、11%、11%

4、12%、12%、12%、12%

5、13%、13%、13%、13%

以下是我目前掌握的代码:

if (!File.Exists(path))
            return null;

        string full = Path.GetFullPath(path);
        string file = Path.GetFileName(full);
        string dir = Path.GetDirectoryName(full);

        //create the "database" connection string
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;"
          + "Data Source=\"" + dir + "\\\";"
          + "Extended Properties=\"text;HDR=No;FMT=Delimited\"";

        //create the database query
        string query = "SELECT * FROM [" + file + "]";

        //create a DataTable to hold the query results
        DataTable dTable = new DataTable();

        //create an OleDbDataAdapter to execute the query
        OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);

        //Get the CSV file to change position.


        try
        {
            //fill the DataTable
            dAdapter.Fill(dTable);

            string activedir = dir;
            //Now write in new format.
            StreamWriter sw = new StreamWriter(File.Create(dir + "\\modified_" + file.ToString()));
            int iRowCount = dTable.Rows.Count;
            foreach(DataRow dr in dTable.Rows)
            {
                string writeVal = (string)dTable.Columns[0].ToString();
                sw.Write(writeVal);
                sw.Write(",");
            }
            sw.Write(sw.NewLine);

            sw.Close();
            dAdapter.Dispose();

        }
        catch (InvalidOperationException /*e*/)
        { }

        string newPath = dir + "\\modified_" + file.ToString();

        if (!File.Exists(newPath))
            return null;

        string f = Path.GetFullPath(newPath);
        string fi = Path.GetFileName(f);
        string di = Path.GetDirectoryName(f);

        //create the "database" connection string
        string conn = "Provider=Microsoft.Jet.OLEDB.4.0;"
          + "Data Source=\"" + di + "\\\";"
          + "Extended Properties=\"text;HDR=No;FMT=Delimited\"";

        //create the database query
        string q = "SELECT * FROM [" + fi + "]";

        //create a DataTable to hold the query results
        DataTable dTe = new DataTable();

        //create an OleDbDataAdapter to execute the query
        OleDbDataAdapter dA = new OleDbDataAdapter(q, connString);

        //Get the CSV file to change position.


        try
        {
            //fill the DataTable
            dA.Fill(dTe);

        }
        catch (InvalidOperationException /*e*/)
        { }

        return dTe;
有什么帮助吗

谢谢

更改了文件以便 “字符串writeVal=…”

现在是

对象writeVal=dr[0]

更改了文件以便 “字符串writeVal=…”

现在是


对象writeVal=dr[0]

我相信您正在寻找数据转换。用于数据表的快速转置

我相信您正在寻找数据转换。用于数据表的快速转置

请参阅迭代器,您只迭代行,而不是列。nvm,明白了,谢谢!你能给我一个简短的评论,这样我就可以换成问题回答了吗?将行“string writeVal=…”更改为object writeVal=dr[0];有没有什么特别的原因可以让您使用成熟的ADO.NET模型来实现这一点?只需要一些基本的字符串处理就容易多了。请参阅迭代器,您只迭代行,而不是列。nvm,明白了,谢谢!你能给我一个简短的评论,这样我就可以换成问题回答了吗?将行“string writeVal=…”更改为object writeVal=dr[0];有没有什么特别的原因可以让您使用成熟的ADO.NET模型来实现这一点?只需要一些基本的字符串处理就可以轻松得多。