这段源码是我在项目中实际应用的源码,没有经过删减及处理。
如果你认为有用可以摘去作为自己的导出类中的一个小工具使用。
/// <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