任何人都可以帮助我理解这些代码行的真正意义......我理解但不完全......我的意思是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 ???
答案 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)
colname1,colname2,colname3,
colname1,colname2,colname3\n
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。