zoukankan      html  css  js  c++  java
  • silverlight 导出DataGrid 数据到Excel

    并修改
     

     

         

    代码

    #region
    /// <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();
    }
    }
    }

    #endregion 导出DataGrid数据到Excel


  • 相关阅读:
    Qt QChart 中 QValueAxis 和 QCategoryAxis 区别
    Qt QChart 绘制面积图 QAreaSeries
    Qt QChart 设置线条样式 虚线
    Qt 读取csv文件并且绘制折线图
    Qt comboBox控件的三种基本用法
    Qt QStringList 的学习笔记
    OpenYurt 联手 eKuiper,解决 IoT 场景下边缘流数据处理难题
    如何避免 Go 命令行执行产生“孤儿”进程?
    阿里巴巴代码平台架构的演进之路
    云原生演进趋势下传统数据库升级实践
  • 原文地址:https://www.cnblogs.com/hl3292/p/1877612.html
Copyright © 2011-2022 走看看