• 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


  • 相关阅读:
    【bzoj1707/Usaco2007 Nov】tanning分配防晒霜——贪心+优先队列
    【bzoj1754/Usaco2005 qua】Bull Math——高精度乘法
    【bzoj1709/Usaco2007 Oct】Super Paintball超级弹珠——递推
    【bzoj2060/Usaco2010 Nov】Visiting Cows 拜访奶牛——树形dp
    【bzoj1710/Usaco2007 Open】Cheappal 廉价回文——区间dp
    【bzoj1828/Usaco2010 Mar】balloc 农场分配——贪心+差分+优先队列
    【bzoj4552/Tjoi2016&Heoi2016】排序——二分+线段树/平衡树+线段树分裂与合并
    【bzoj2083/Poi2010】Intelligence test——二分+贪心
    【bzoj1596/Usaco2008 Jan】电话网络——dfs
    【bzoj1782/Usaco2010 Feb】slowdown 慢慢游——dfs序+树状数组
  • 原文地址:https://www.cnblogs.com/hl3292/p/1877612.html
Copyright © 2020-2023  润新知