• Silverlight的DataGrid导出文档


    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    
    namespace SilverlightApplication2
    {
        public class Class_Excel
        {
            /// <summary> 
            /// CSV格式化 
            /// </summary> 
            /// <param name="data">数据</param> 
            /// <returns>格式化数据</returns> 
            private static string FormatCsvField(string data)
            {
                return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
            }
    
            /// <summary> 
            /// 导出DataGrid数据到Excel 
            /// </summary> 
            /// <param name="withHeaders">是否需要表头</param> 
            /// <param name="grid">DataGrid</param> 
            /// <returns>Excel内容字符串</returns> 
            public static string ExportDataGrid(bool withHeaders, DataGrid grid)
            {
                System.Reflection.PropertyInfo propInfo;
                System.Windows.Data.Binding binding;
                var strBuilder = new System.Text.StringBuilder();
                var source = (grid.ItemsSource as System.Collections.IList);
                if (source == null) return "";
                var headers = new List<string>();
                grid.Columns.ToList().ForEach(col =>
                {
                    if (col is DataGridBoundColumn)
                    { headers.Add(FormatCsvField(col.Header.ToString())); }
                });
                strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
                foreach (Object data in source)
                {
                    var csvRow = new List<string>();
                    foreach (DataGridColumn col in grid.Columns)
                    {
                        if (col is DataGridBoundColumn)
                        {
                            binding = (col as DataGridBoundColumn).Binding;
                            string colPath = binding.Path.Path;
                            propInfo = data.GetType().GetProperty(colPath);
                            if (propInfo != null)
                            {
                                csvRow.Add(FormatCsvField(propInfo.GetValue(data, null).ToString()));
                            }
                        }
                    }
                    strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
                }
                return strBuilder.ToString();
            }
    
            /// <summary> 
            /// 导出DataGrid数据到Excel 
            /// </summary> 
            /// <param name="withHeaders">是否需要表头</param> 
            /// <param name="grid">DataGrid</param> 
            /// <param name="dataBind"></param> 
            /// <returns>Excel内容字符串</returns> 
            public static string ExportDataGrid(bool withHeaders, DataGrid grid, bool dataBind)
            {
                var strBuilder = new System.Text.StringBuilder();
                var source = (grid.ItemsSource as System.Collections.IList);
                if (source == null) return "";
                var headers = new List<string>();
                grid.Columns.ToList().ForEach(col =>
                {
                    if (col is DataGridTemplateColumn)
                    {
                        headers.Add(col.Header != null ? FormatCsvField(col.Header.ToString()) : string.Empty);
                    }
                });
                strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
                foreach (Object data in source)
                {
                    var csvRow = new List<string>();
                    foreach (DataGridColumn col in grid.Columns)
                    {
                        if (col is DataGridTemplateColumn)
                        {
                            FrameworkElement cellContent = col.GetCellContent(data);
                            TextBlock block;
                            if (cellContent.GetType() == typeof(Grid))
                            {
                                block = cellContent.FindName("TempTextblock") as TextBlock;
                            }
                            else
                            {
                                block = cellContent as TextBlock;
                            }
                            if (block != null)
                            {
                                csvRow.Add(FormatCsvField(block.Text));
                            }
                        }
                    }
                    strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
                    //strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t"); 
                }
                return strBuilder.ToString();
            }
            /// <summary> 
            /// 导出DataGrid数据到Excel为CVS文件 
            /// 使用utf8编码 中文是乱码 改用Unicode编码 
            /// 
            /// </summary> 
            /// <param name="withHeaders">是否带列头</param> 
            /// <param name="grid">DataGrid</param> 
            public static void ExportDataGridSaveAs(bool withHeaders, DataGrid grid)
            {
                string data = ExportDataGrid(true, grid);
                var sfd = new SaveFileDialog
                {
                    DefaultExt = "csv",
                    Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
                    FilterIndex = 1
                };
                if (sfd.ShowDialog() == true)
                {
                    using (Stream stream = sfd.OpenFile())
                    {
                        using (var writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
                        {
                            data = data.Replace(",", "\t");
                            writer.Write(data);
                            writer.Close();
                        }
                        stream.Close();
                    }
                }
            }
        }
    }
  • 相关阅读:
    将一个类的Lambda转换成另一个类的研究
    欧拉计划 第10题
    C#4.0泛型中的out使用
    WP7应用开发笔记(4) 圆形滑动控件实现
    欧拉计划 第6题
    欧拉计划 第一题
    助手系列之python的FTP服务器
    Visual C++ 2008进行MySQL编程
    通过FTP命令上传下载
    助手系列之连接mysql数据库
  • 原文地址:https://www.cnblogs.com/nidakun/p/3028886.html
Copyright © 2020-2023  润新知