博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF及Silverlight中将DataGrid数据导出
阅读量:6983 次
发布时间:2019-06-27

本文共 4142 字,大约阅读时间需要 13 分钟。

这段源码是我在项目中实际应用的源码,没有经过删减及处理。

如果你认为有用可以摘去作为自己的导出类中的一个小工具使用。

   
///
 
<summary>
    
///
 数据源导出辅助类
    
///
 
</summary>
    
///
 
<remarks>
    
///
 Author:         sucsy
    
///
 Create date:    2011-6-17
    
///
 Description:    提供基于数据源(公共枚举器类型)的数据导出辅助功能
    
///
 
</remarks>
    
public 
class DataSourceExportHelper
    {
        
///
 
<summary>
        
///
 导出到文本
        
///
 
</summary>
        
///
 
<param name="dataSource">
数据源
</param>
        
///
 
<param name="splitString">
分隔符
</param>
        
///
 
<param name="columns">
导出的列(为null时表示全部导出)
</param>
        
///
 
<returns>
文本数据
</returns>
        
public 
static 
string Export2Text(IEnumerable dataSource,
string splitString,DataGridColumn[] columns,
bool isVisiableColumn)
        {
            
//
定义结果存放对象
            StringBuilder sbResult = 
new StringBuilder();
            
string[] columnHeaders = GetSelectedColumns(columns);
            
//
处理DataTable作为数据源的数据导出操作
            
if (dataSource 
is System.Data.DataView)
            {
                System.Data.DataView dataView = (System.Data.DataView)dataSource;
                
//
加载数据标题
                
foreach (DataColumn objHeaderpi 
in dataView.Table.Columns)
                {
                    
if (columns == 
null || columnHeaders.Contains(objHeaderpi.ColumnName))
                        sbResult.Append(objHeaderpi.ColumnName + splitString);
                }
                sbResult.AppendLine();
                
foreach (System.Data.DataRowView dr 
in dataView)
                {
                    
foreach (DataColumn objHeaderpi 
in dataView.Table.Columns)
                    {
                        
if (columns == 
null || columnHeaders.Contains(objHeaderpi.ColumnName))
                            sbResult.Append(dr[objHeaderpi.ColumnName].ToString() + splitString);
                    }
                    sbResult.AppendLine();
                }
            }
            
else
            {               
                
foreach (DataGridColumn dgcol 
in columns)
                    sbResult.Append(dgcol.Header.ToString() + splitString);
                sbResult.AppendLine();
                
foreach (
object data 
in dataSource)
                {
                    
foreach (DataGridColumn col 
in columns)
                    {
                        
string strValue = 
"";
                        Binding objBinding = 
null;
                        
if (col 
is DataGridBoundColumn)
                            objBinding = (Binding)(col 
as DataGridBoundColumn).Binding;
                        
if (col 
is DataGridTemplateColumn)
                        {
                            DependencyObject objDO = (col 
as DataGridTemplateColumn).CellTemplate.LoadContent();
                            FrameworkElement oFE = (FrameworkElement)objDO;
                            FieldInfo oFI = oFE.GetType().GetField(
"
TextProperty
");
                            
if (oFI != 
null)
                            {
                                
if (oFI.GetValue(
null) != 
null)
                                {
                                    
if (oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(
null)) != 
null)
                                        objBinding = oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(
null)).ParentBinding;
                                }
                            }
                        }
                        
if (objBinding != 
null)
                        {
                            
if (objBinding.Path.Path != 
"")
                            {
                                
string[] dataTree = objBinding.Path.Path.Split(
"
.
".ToArray(), StringSplitOptions.RemoveEmptyEntries);
                                
object parentData = data;
                                
for (
int treeIndex = 
0; treeIndex < dataTree.Length; treeIndex++)
                                {
                                    PropertyInfo pData = parentData.GetType().GetProperty(dataTree[treeIndex]);
                                    parentData = pData.GetValue(parentData, 
null);
                                }
                                
if (parentData != 
null) strValue = parentData.ToString();
                                
                            }
                            
if (objBinding.Converter != 
null)
                            {
                                
if (strValue != 
"")
                                    strValue = objBinding.Converter.Convert(strValue, 
typeof(
string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString();
                                
else
                                    strValue = objBinding.Converter.Convert(data, 
typeof(
string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString();
                            }
                        }                       
                        sbResult.Append(strValue.Replace(
'
,
'
'
') + splitString);
                    }
                    sbResult.AppendLine();
                }
            }
            
return sbResult.ToString();
        }
        
public 
static 
string[] GetSelectedColumns(DataGridColumn[] columns)
        {
            List<
string> columnsHeader = 
new List<
string>();
            
foreach (DataGridColumn column 
in columns)
            {
                
if (column.Visibility == System.Windows.Visibility.Visible)
                    columnsHeader.Add(column.Header.ToString());
            }
            
return columnsHeader.ToArray();
        }
        
///
 
<summary>
        
///
 导出为平面文本
        
///
 
</summary>
        
///
 
<param name="dataSource">
数据源
</param>
        
///
 
<param name="columns">
选择要导出的列
</param>
        
///
 
<returns>
平面文本
</returns>
        
public 
static 
string Export2FlotText(IEnumerable dataSource,DataGridColumn[] columns,
bool isVisiableColumn)
        {
            
return Export2Text(dataSource, 
"
\t
", columns, isVisiableColumn);
        }
        
///
 
<summary>
        
///
 导出为平面文本
        
///
 
</summary>
        
///
 
<param name="dataSource">
数据源
</param>
        
///
 
<param name="columns">
选择要导出的列
</param>
        
///
 
<returns>
平面文本
</returns>
        
public 
static 
string Export2FlotCSV(IEnumerable dataSource,DataGridColumn[] columns,
bool isVisiableColumn)
        {
            
return Export2Text(dataSource, 
"
,
", columns, isVisiableColumn);
        }
    }

 

希望这段代码能够对你有用。

sucsy 2011-9-23

 

转载于:https://www.cnblogs.com/sucsy/archive/2011/09/23/2186242.html

你可能感兴趣的文章
Airbnb数据科学团队进化论:如何由内而外实现数据驱动
查看>>
如何用机器学习预测超售,避免美联航“暴力赶客”悲剧
查看>>
css细节(实习第1天)
查看>>
腾讯Android自动化测试实战3.1.4 Robotium的控件获取、操作及断言
查看>>
《Arduino计算机视觉编程》一3.3 总结
查看>>
Bash 中的特殊字符大全
查看>>
《C语言点滴》一1.5 内功修炼
查看>>
浅析 Linux 初始化 init 系统: UpStart
查看>>
《PHP和MySQL Web开发从新手到高手(第5版)》一1.7 万事俱备,摩拳擦掌
查看>>
【Hadoop Summit Tokyo 2016】LLAP:Hive上的次秒级分析查询
查看>>
倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?
查看>>
snownlp 中文语法分析
查看>>
Python中os和shutil模块实用方法集锦
查看>>
c++中的左值与右值
查看>>
阿里云推出免费套餐 30余款云产品半年免费
查看>>
linux 用户/用户组添加修改删除(ubuntu/centos)
查看>>
Flink 原理与实现:Window 机制
查看>>
Kubernetes环境下的各种调试方法
查看>>
CC2530之Flash笔记
查看>>
Weex Workshop 挑战赛,等你来战!
查看>>