什么是foreach循环正好在这里...帮助我准确理解它

时间:2016-04-06 06:03:19

标签: c# asp.net visual-studio

  

任何人都可以帮助我理解这些代码行的真正意义......我理解但不完全......我的意思是foreach在这里做了什么?

if (dt.Rows.Count > 0)
    {
        //GridView1.Visible = true;
        Gridview1.DataSource = dt;
        Gridview1.DataBind();
        StringBuilder sb = new StringBuilder();

        foreach (DataColumn col in dt.Columns)
        {
            sb.Append(col.ColumnName + ",");
        }

        sb.Remove(sb.Length - 1, 1);
        sb.Append(Environment.NewLine);

        foreach (DataRow row in dt.Rows)
        {
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sb.Append(row[i].ToString() + ",");
            }

            sb.Append(Environment.NewLine);
        }

        Response.ClearHeaders();
        Response.AppendHeader("Content-Disposition", "attachment; filename=CDR OF " + TextBox1.Text + ".csv");
        Response.AppendHeader("Content-Length", sb.Length.ToString());
        Response.ContentType = "text/csv";
        Response.Write(sb.ToString());
        Response.Flush();
        Response.End();
    }
    else
    {
        //GridView1.Visible = false;
        Show("No CDR Found!");
    }
  

我们可以使用StringWriter或string代替StringBuilder ???

4 个答案:

答案 0 :(得分:1)

第一个foreach附加了列标题名称。 第二个是附加单元格值。两者都以逗号分隔的方式。 你正在将GridView转换为csv。

为什么不使用像CSV帮助器这样的简单转换器。 拥有你需要的一切。 CSV Helper

答案 1 :(得分:1)

看起来代码正在尝试生成带有数据表标头的csv文件。第一个循环遍历DataTable中的列,并生成逗号分隔的列名称字符串(由StringBuffer引用)。

 sb.Remove(sb.Length - 1, 1);
 sb.Append(Environment.NewLine);

上面的代码段从逗号分隔的列名字符串中删除最后一个逗号,然后添加一个新行

 foreach (DataRow row in dt.Rows)
    {
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            sb.Append(row[i].ToString() + ",");
        }

        sb.Append(Environment.NewLine);
    }

上面的循环遍历DataTable的每一行,并为每个列值创建一个逗号分隔的字符串。处理完每一行后,将添加一个新行,以便在新行中将下一行内容添加为逗号分隔的字符串。

答案 2 :(得分:1)

  1. 第一个循环使用逗号列出所有列名:
  2. colname1,colname2,colname3,

    1. 删除然后删除最后一个逗号并添加换行符
    2. colname1,colname2,colname3\n

      1. 第二个循环列出了每行每列的所有值
      2. colname1,colname2,colname3\n row1col1value,row1col2value,row1col3value,\n -- note that the comma is NOT removed here row2col1value,row2col2value,row2col3value,\n row3col1value,row3col2value,row3col3value,\n row4col1val etc...

        是的,我认为您可以使用字符串而不是字符串构建器。

答案 3 :(得分:1)

第一个循环是从Datatable中获取每个列名,并使用分隔符逗号附加到stringBuilder。然后它修剪附加的最后一个逗号并向其添加一个新行。 第二个循环是获取DataRow的所有数据值(逐行),然后是逗号并附加到同一个stringbuilder。