首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:6542   评论: 2    参与评论
标题   DataSet导出CSV格式(ASP.NET,C#)     选择自 Not 的 Blog
关键字   DataSet DataGrid Asp.NET C#
出处  
DataSet导出CSV格式(ASP.NET,C#)
 
作者:Not
MSN:notking@hotmail.com
Email:nots@sohu.com
 
本文引用下面的 Microsoft .NET 框架类库命名空间:
System.Data;
System.Web.UI.WebControls;
 
概要
本文解决将DataSet导出到CSV格式问题、将DataGrid中的数据导出到CSV格式问题
 
导出DataSet所有的列到CSV格式
遍历DataSet的Tables
遍历Table的Rows
遍历Rows的Columns
 
代码
/// <summary>
/// 将DataSet导出成CSV格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns>CSV字符串数据</returns>
public static string ExportCSV(DataSet ds)
{
 string data = "";
 //data = ds.DataSetName + "\n";
 
 foreach(DataTable tb in ds.Tables)
 {
  data += tb.TableName + "\n";
 
  //写出列名
  foreach (DataColumn column in tb.Columns)
  {
   data += column.ColumnName + ",";
  }
  data += "\n";
  
  //写出数据
  foreach (DataRow row in tb.Rows)
  {
   foreach (DataColumn column in tb.Columns)
   {
    data += row[column].ToString() + ",";
   }
   data += "\n";
  }
  data += "\n";
 }
 
 return data;
}
 
DataSet与DataGrid问题
一般情况下我们用DataGrid显示DataSet时,只显示我们需要的列,并不显示DataSet所有的列,所以导出成CSV格式的时候可能只需要导出DataGrid中的列。
 
本文解决方法:
将DataSet中需要导出的列做上标记,在导出时只将有标记的列导出。
 
代码
/// <summary>
/// 标记DataColumn为接受导出的
/// </summary>
/// <param name="column">DataColumn</param>
public static void SetExport(DataColumn column)
{
 if (column != null)
 {
  if (column.ExtendedProperties["IsExport"] == null)
   column.ExtendedProperties.Add("IsExport", "true");
  else
   column.ExtendedProperties["IsExport"] = "true";
 }
}
 
/// <summary>
/// 标记DataTable中的一些列为接受导出的
/// </summary>
/// <param name="tb">DataTable</param>
/// <param name="columns">列</param>
public static void SetExport(DataTable tb,params string[] columns)
{
 foreach(string column in columns)
 {
  SetExport(tb.Columns[column]);
 }
}
 
/// <summary>
/// 标记DataTable中的一些列为接受导出的
/// </summary>
/// <param name="tb">DataTable</param>
/// <param name="columns">DataGrid的列</param>
public static void SetExport(DataTable tb,DataGridColumnCollection columns)
{
 foreach(DataGridColumn column in columns)
 {
  if (column.GetType().Name == "BoundColumn" || column.GetType().Name == "HyperLinkColumn" || column.GetType().Name == "TemplateColumn")
   SetExport(tb.Columns[column.HeaderText]);
 }
}
 
/// <summary>
/// 判断DataColumn是否为接受导出的
/// </summary>
/// <param name="column">DataColumn</param>
/// <returns>bool型的结果</returns>
public static bool IsExport(DataColumn column)
{
 if (column.ExtendedProperties["IsExport"] != null && column.ExtendedProperties["IsExport"].ToString().Trim().ToLower() == "true")
  return true;
 else
  return false;
}
 

使用示例:
Export.SetExport(ds.供应商列表视图,dg.Columns);
 
string data = Export.ExportCSV(ds);
 
string temp = string.Format("attachment;filename={0}","ExportData.csv");
Response.ClearHeaders();
Response.AppendHeader("Content-disposition", temp);
Response.Write(data);
Response.End();

相关文章
对该文的评论
lynn0821 ( 2005-04-27)
完全没有必要另写方法来打印出DataGrid中的字段,只需要在遍历一下其中的每个表中的columnstyle就可以得到有哪些字段。联系我:lynn0821@sohu.com我有源码,完全自己写的。我才毕业,呵呵,多多指教。
imports ( 2003-01-14)
mark