将DataSet导出为CSV格式

博客围绕DataSet与DataGrid问题展开,通常用DataGrid显示DataSet时,只需显示所需列,导出为CSV格式时也只需导出DataGrid中的列。解决方法是给DataSet中需导出的列做标记,导出时仅导出有标记的列。
导出DataSet所有的列到CSV格式  
遍历DataSet的Tables  
遍历Table的Rows  
遍历Rows的Columns  

 1ExpandedBlockStart.gifContractedBlock.gif/**////  <summary>  
 2InBlock.gif///  将DataSet导出成CSV格式  
 3InBlock.gif///  </summary>  
 4InBlock.gif///  <param  name="ds">DataSet</param>  
 5ExpandedBlockEnd.gif///  <returns>CSV字符串数据</returns>  

 6None.gifpublic  static  string  ExportCSV(DataSet  ds)  
 7ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
 8InBlock.gif string  data  =  "";  
 9InBlock.gif //data  =  ds.DataSetName  +  "\n";  
10InBlock.gif   
11InBlock.gif foreach(DataTable  tb  in  ds.Tables)  
12ExpandedSubBlockStart.gifContractedSubBlock.gif dot.gif{  
13InBlock.gif   data  +=  tb.TableName  +  "\n";  
14InBlock.gif   
15InBlock.gif   //写出列名  
16InBlock.gif   foreach  (DataColumn  column  in  tb.Columns)  
17ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{  
18InBlock.gif     data  +=  column.ColumnName  +  ",";  
19ExpandedSubBlockEnd.gif   }
  
20InBlock.gif   data  +=  "\n";  
21InBlock.gif     
22InBlock.gif   //写出数据  
23InBlock.gif   foreach  (DataRow  row  in  tb.Rows)  
24ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{  
25InBlock.gif     foreach  (DataColumn  column  in  tb.Columns)  
26ExpandedSubBlockStart.gifContractedSubBlock.gif     dot.gif{  
27InBlock.gif       data  +=  row[column].ToString()  +  ",";  
28ExpandedSubBlockEnd.gif     }
  
29InBlock.gif     data  +=  "\n";  
30ExpandedSubBlockEnd.gif   }
  
31InBlock.gif   data  +=  "\n";  
32ExpandedSubBlockEnd.gif }
  
33InBlock.gif   
34InBlock.gif return  data;  
35ExpandedBlockEnd.gif}
  
36None.gif


DataSet与DataGrid问题  
一般情况下我们用DataGrid显示DataSet时,只显示我们需要的列,并不显示DataSet所有的列,所以导出成CSV格式的时候可能只需要导出DataGrid中的列。  
   
本文解决方法:  
将DataSet中需要导出的列做上标记,在导出时只将有标记的列导出。  
   
代码

 

 1ExpandedBlockStart.gifContractedBlock.gif/**////  <summary>  
 2InBlock.gif///  标记DataColumn为接受导出的  
 3InBlock.gif///  </summary>  
 4ExpandedBlockEnd.gif///  <param  name="column">DataColumn</param>  

 5None.gifpublic  static  void  SetExport(DataColumn  column)  
 6ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
 7InBlock.gif if  (column  !=  null)  
 8ExpandedSubBlockStart.gifContractedSubBlock.gif dot.gif{  
 9InBlock.gif   if  (column.ExtendedProperties["IsExport"]  ==  null)  
10InBlock.gif     column.ExtendedProperties.Add("IsExport",  "true");  
11InBlock.gif   else  
12InBlock.gif     column.ExtendedProperties["IsExport"]  =  "true";  
13ExpandedSubBlockEnd.gif }
  
14ExpandedBlockEnd.gif}
  
15None.gif   
16ExpandedBlockStart.gifContractedBlock.gif/**////  <summary>  
17InBlock.gif///  标记DataTable中的一些列为接受导出的  
18InBlock.gif///  </summary>  
19InBlock.gif///  <param  name="tb">DataTable</param>  
20ExpandedBlockEnd.gif///  <param  name="columns"></param>  

21None.gifpublic  static  void  SetExport(DataTable  tb,params  string[]  columns)  
22ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
23InBlock.gif foreach(string  column  in  columns)  
24ExpandedSubBlockStart.gifContractedSubBlock.gif dot.gif{  
25InBlock.gif   SetExport(tb.Columns[column]);  
26ExpandedSubBlockEnd.gif }
  
27ExpandedBlockEnd.gif}
  
28None.gif   
29ExpandedBlockStart.gifContractedBlock.gif/**////  <summary>  
30InBlock.gif///  标记DataTable中的一些列为接受导出的  
31InBlock.gif///  </summary>  
32InBlock.gif///  <param  name="tb">DataTable</param>  
33ExpandedBlockEnd.gif///  <param  name="columns">DataGrid的列</param>  

34None.gifpublic  static  void  SetExport(DataTable  tb,DataGridColumnCollection  columns)  
35ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
36InBlock.gif foreach(DataGridColumn  column  in  columns)  
37ExpandedSubBlockStart.gifContractedSubBlock.gif dot.gif{  
38InBlock.gif   if  (column.GetType().Name  ==  "BoundColumn"    ¦  ¦  column.GetType().Name  ==  "HyperLinkColumn"    ¦  ¦  column.GetType().Name  ==  "TemplateColumn")  
39InBlock.gif     SetExport(tb.Columns[column.HeaderText]);  
40ExpandedSubBlockEnd.gif }
  
41ExpandedBlockEnd.gif}
  
42None.gif   
43ExpandedBlockStart.gifContractedBlock.gif/**////  <summary>  
44InBlock.gif///  判断DataColumn是否为接受导出的  
45InBlock.gif///  </summary>  
46InBlock.gif///  <param  name="column">DataColumn</param>  
47ExpandedBlockEnd.gif///  <returns>bool型的结果</returns>  

48None.gifpublic  static  bool  IsExport(DataColumn  column)  
49ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
50InBlock.gif if  (column.ExtendedProperties["IsExport"]  !=  null  &&  column.ExtendedProperties["IsExport"].ToString().Trim().ToLower()  ==  "true")  
51InBlock.gif   return  true;  
52InBlock.gif else  
53InBlock.gif   return  false;  
54ExpandedBlockEnd.gif}
  
55None.gif

使用示例:  
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();

转载于:https://www.cnblogs.com/Hedonister/archive/2005/06/08/169973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值