private void Button_Click_1(object sender, RoutedEventArgs e)
{ ExportDataGridSaveAs(true, this.data);
}
#region wpf客户端 导出DataGrid数据到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>
/// <param name="dataBind"></param>
/// <returns>Excel内容字符串</returns>
public static string ExportDataGrid(bool withHeaders, System.Windows.Controls.DataGrid grid, bool dataBind)
{
try
{
var strBuilder = new System.Text.StringBuilder();
var source = (grid.ItemsSource as System.Collections.IList);
if (source == null) return "";
var headers = new List<string>();
List<string> bt = new List<string>(); foreach (var hr in grid.Columns)
{
// DataGridTextColumn textcol = hr. as DataGridTextColumn;
headers.Add(hr.Header.ToString());
if (hr is DataGridTextColumn)//列绑定数据
{
DataGridTextColumn textcol = hr as DataGridTextColumn;
if (textcol != null)
bt.Add((textcol.Binding as Binding).Path.Path.ToString()); //获取绑定源 }
else if (hr is DataGridTemplateColumn)
{
if (hr.Header.Equals("操作"))
bt.Add("Id");
}
else
{ }
}
strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
foreach (var data in source)
{
var csvRow = new List<string>();
foreach (var ab in bt)
{
string s = ReflectionUtil.GetProperty(data, ab).ToString();
if (s != null)
{
csvRow.Add(FormatCsvField(s));
}
else
{
csvRow.Add("\t");
}
}
strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
// strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t");
}
return strBuilder.ToString();
}
catch (Exception ex)
{
// LogHelper.Error(ex);
return "";
}
}
public class ReflectionUtil
{
public static object GetProperty(object obj, string propertyName)
{
PropertyInfo info = obj.GetType().GetProperty(propertyName);
if (info == null && propertyName.Split('.').Count() > )
{
object o = ReflectionUtil.GetProperty(obj, propertyName.Split('.')[]);
int index = propertyName.IndexOf('.');
string end = propertyName.Substring(index + , propertyName.Length - index - );
return ReflectionUtil.GetProperty(o, end);
}
object result = null;
try
{
result = info.GetValue(obj, null);
}
catch (TargetException)
{
return "";
}
return result == null ? "" : result;
}
}
/// <summary>
/// 导出DataGrid数据到Excel为CVS文件
/// 使用utf8编码 中文是乱码 改用Unicode编码
///
/// </summary>
/// <param name="withHeaders">是否带列头</param>
/// <param name="grid">DataGrid</param>
public static void ExportDataGridSaveAs(bool withHeaders, System.Windows.Controls.DataGrid grid)
{
try
{
string data = ExportDataGrid(true, grid, true);
var sfd = new Microsoft.Win32.SaveFileDialog
{
DefaultExt = "csv",
Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
FilterIndex =
};
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();
}
}
MessageBox.Show("导出成功!");
}
catch (Exception ex)
{
// LogHelper.Error(ex);
}
} #endregion 导出DataGrid数据到Excel

找了好多都有问题,这个可以分享给到家

转自:https://www.cnblogs.com/kmust/p/4412228.html

最新文章

  1. ThinkPHP讲解(十)——第三方类的引入:以分页为主
  2. The Dataflow Model 论文
  3. wcf精通1-15
  4. iOS 实现简单的Http 服务
  5. 关于javax.servlet.jsp.JspTagException: Don&#39;t know how to iterate over supplied &quot;items&quot; in &amp;lt;forEach&amp;gt;
  6. iOS:UIView的block函数实现转场动画---双视图
  7. 【转】Android 4.4源码下载与编译
  8. You must not call setTag() on a view Glide is targeting
  9. 转:【WebDriver】封装GET方法来解决页面跳转不稳定的问题
  10. Mac下安装第三方模块报错:‘sqlfront.h‘ file not found的解决办法
  11. jenkins配置演示
  12. Reward List 赏金列表
  13. hashCode 与 equals
  14. SQL 将查询结果插入到另一张表中
  15. c++ :
  16. visual2017专业版MFC编程环境搭建及第一个MFC程序的创建
  17. 国外青少年最喜爱的聊天 app,竟然是 Google Docs
  18. [20171124]手工使用Seed_Database.dfb和Seed_Database.ctl建库.txt
  19. C# TreeView 连续点击 不触发AfterCheck事件
  20. 解释#ifdef ALLOC_PRAGMA代码段的原理

热门文章

  1. python的杨辉三角
  2. Android相关概念
  3. netsharp.weixin和sdk的配置信息管理
  4. Windows server 2008 被ntlmssp安装攻击 解决
  5. 2017/2/14:JSTL标签与el表达式
  6. 数组方法splice
  7. java:static详解
  8. day16正则表达式作业
  9. markdown中自己偶尔需要的小技巧
  10. PLSQL Developer对oracle中的数据进行备份恢复