微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WPF及Silverlight中将DataGrid数据导出

这段源码是我在项目中实际应用的源码,没有经过删减及处理。 如果你认为有用可以摘去作为自己的导出类中的一个小工具使用。 /// summary /// 数据源导出辅助类 /// /summary /// remarks /// Author:sucsy /// Createdate:2011-6-17 /// Description:提供基于数据源(公共枚举器类型)的数据导出辅助功能 /// /remarks publi
  

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

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

    ///   <summary>
    
 数据源导出辅助类
    
</summary> <remarks>  Author:         sucsy
    
 Create date:    2011-6-17
    
 Description:    提供基于数据源(公共枚举器类型)的数据导出辅助功能
    
</remarks>
     public  class DataSourceExportHelper
    {
        
        
 导出到文本
        
<param name="dataSource"> 数据源 </param> <param name="splitString"> 分隔符 <param name="columns"> 导出的列(为null时表示全部导出) <returns> 文本数据 </returns>
         static  string Export2Text(IEnumerable dataSource,string splitString,DataGridColumn[] columns,255)">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)
                {
                     in dataView.Table.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;

                         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 !=  if (strValue !=  "")
                                    strValue = objBinding.Converter.Convert(strValue,255)">typeof( string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString();
                                 else
                                    strValue = objBinding.Converter.Convert(data, objBinding.ConverterCulture).ToString();
                            }
                        }                       
                        sbResult.Append(strValue.Replace( ' , ' ') + splitString);
                    }
                    sbResult.AppendLine();
                }

            }

             return sbResult.ToString();
        }
         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();
        }



          导出为平面文本
        
选择要导出的列 平面文本 string Export2Flottext(IEnumerable dataSource,255)">return Export2Text(dataSource,0)">\t ", columns, isVisiableColumn);
        }

         string Export2FlotCSV(IEnumerable dataSource, isVisiableColumn);
        }
    }

  本文来自旧木的博客,原文地址:http://www.cnblogs.com/sucsy/archive/2011/09/23/2186242.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐