Silverlight导出excel的另一种方式
来源:互联网 发布:资产管理公司 知乎 编辑:程序博客网 时间:2024/05/16 01:28
说明:这个方法是从网上找到的,但是原来的方法没有考虑到绑定的字段是“自定义类型属性的属性” 以及更深(我在说啥呢。。)。我动了一些手脚完善了一点。
备注1:还有就是找不到原来的网址了。。
备注2:我先在微软战车上的做了留底。
两个方法(做成扩展方法,调用方便)
public static string ExportDataGrid(this DataGrid grid, bool withHeaders)
{
string colPath;
System.Reflection.PropertyInfo propInfo;
System.Windows.Data.Binding binding;
System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
System.Collections.IList source = (grid.ItemsSource as System.Collections.IList);
if (source == null)
return "";
List<string> 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("\t\n");
foreach (Object data in source)
{
List<string> csvRow = new List<string>();
foreach (DataGridColumn col in grid.Columns)
{
if (col is DataGridBoundColumn)
{
binding = (col as DataGridBoundColumn).Binding;
colPath = binding.Path.Path;
string[] pathlist = colPath.Split('.');//此处往下做了修改
object currentData = data;
int count = 0;
foreach (string item in pathlist)
{
propInfo = currentData.GetType().GetProperty(item);
if (propInfo == null) break;
count++;
if (count == pathlist.Count())
{
csvRow.Add(FormatCSVField(propInfo.GetValue(currentData, null).GetTrimString()));
break;
}
else
{
currentData = propInfo.GetValue(currentData, null);
}
}
}
}
strBuilder
.Append(String.Join("", csvRow.ToArray()))
.Append("\t\n");
}
return strBuilder.ToString();
}
private static string FormatCSVField(string data)
{
//return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
return String.Format("\t{0}", data.Replace("\"", "\t\n"));
}
{
string colPath;
System.Reflection.PropertyInfo propInfo;
System.Windows.Data.Binding binding;
System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
System.Collections.IList source = (grid.ItemsSource as System.Collections.IList);
if (source == null)
return "";
List<string> 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("\t\n");
foreach (Object data in source)
{
List<string> csvRow = new List<string>();
foreach (DataGridColumn col in grid.Columns)
{
if (col is DataGridBoundColumn)
{
binding = (col as DataGridBoundColumn).Binding;
colPath = binding.Path.Path;
string[] pathlist = colPath.Split('.');//此处往下做了修改
object currentData = data;
int count = 0;
foreach (string item in pathlist)
{
propInfo = currentData.GetType().GetProperty(item);
if (propInfo == null) break;
count++;
if (count == pathlist.Count())
{
csvRow.Add(FormatCSVField(propInfo.GetValue(currentData, null).GetTrimString()));
break;
}
else
{
currentData = propInfo.GetValue(currentData, null);
}
}
}
}
strBuilder
.Append(String.Join("", csvRow.ToArray()))
.Append("\t\n");
}
return strBuilder.ToString();
}
private static string FormatCSVField(string data)
{
//return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
return String.Format("\t{0}", data.Replace("\"", "\t\n"));
}
使用示范:
void btnExcelExport_Click(object sender, RoutedEventArgs e)
{
string data = gridOrderList.ExportDataGrid(true);//调用函数
byte[] tmp;
tmp = Encoding.Unicode.GetBytes(data);
SaveFileDialog sfd = new SaveFileDialog()
{
DefaultExt = "csv",
Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
FilterIndex = 1
};
if (sfd.ShowDialog() == true)
{
using (System.IO.Stream stream = sfd.OpenFile())
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, Encoding.Unicode, 30))
{
writer.Write(data);
writer.Close();
}
stream.Close();
}
}
}
{
string data = gridOrderList.ExportDataGrid(true);//调用函数
byte[] tmp;
tmp = Encoding.Unicode.GetBytes(data);
SaveFileDialog sfd = new SaveFileDialog()
{
DefaultExt = "csv",
Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
FilterIndex = 1
};
if (sfd.ShowDialog() == true)
{
using (System.IO.Stream stream = sfd.OpenFile())
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, Encoding.Unicode, 30))
{
writer.Write(data);
writer.Close();
}
stream.Close();
}
}
}
本文来自往事如锋的博客,原文地址:http://www.cnblogs.com/xtechnet/archive/2011/05/28/silverlightToExcel.html
- Silverlight导出excel的另一种方式
- silverlight导出Excel
- Oledb的方式导出Excel
- Silverlight 数据导出(Excel,word)
- Silverlight 导出excel (二)
- Silverlight中导出Excel文件
- 另一种爱的方式
- 打电话的另一种方式
- 这是一段silverlight导出Excel的代码 来自zhangfengyi
- Silverlight的DataGrid中:导出到Excel或CSV 3
- Silverlight 导出各种格式的Word和Excel表格
- Silverlight 导出各种格式的Word和Excel表格 .
- Silverlight 导出各种格式的Word和Excel表格
- Silverlight 导出各种格式的Word和Excel表格
- 另一种数据导出的方法
- 导出excel的两种方式
- 导出Excel的几种方式
- datagridview 导出excel的两种方式
- MarkdownPad中使用中文
- Spring AOP+ehCache简单缓存系统解决方案
- Hibernate Search in a JPA application
- 常用的数据库管理SQL语句(二)
- ABAP中Char類型數據轉換成Decimal類型
- Silverlight导出excel的另一种方式
- hdu 1253 胜利大逃亡
- 7种员工最受赏识
- 浅析C++中内存分配的方式
- jQuery学习笔记1-5
- Asp.Net自定义错误页心得介绍
- 如何在Windows Azure VM上的SQL Server和Windows Azure SQL Database两者中做出选择
- hdu 1698 Just a Hook(线段树 成段更新)
- servlet的生命周期是什么?jsp都有哪些对象和动作?