Silverlight的DataGrid中:导出到Excel或CSV [英] Silverlight DataGrid: Export to excel or csv

查看:74
本文介绍了Silverlight的DataGrid中:导出到Excel或CSV的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有我可以导出我的Silverlight的DataGrid数据,Excel或CSV方式?

Is there a way I can export my Silverlight DataGrid data to excel or csv?

我在网上搜索,但找不到任何的例子!

I searched the web but can't find any examples!

非常感谢

推荐答案

Silverlight 3中改变了回答这个问题,因为它为用户提供了在他们指定的位置创建用户的桌面上的文件的能力。我适应提交DaniCE,分裂成东西为便于阅读,一些方法code和正在使用的Excel应该承认一个松散定义的CSV格式。

Silverlight 3 changes the answer to this question because it gives the ability of the user to create a file on the user's desktop in a location that they specify. I adapted the code submitted by DaniCE, split things into a few methods for readability and am using a loosely defined CSV format that Excel should recognize.

private void exportHistoryButton_Click(object sender, RoutedEventArgs e) 
{
    string data = ExportDataGrid(true, historyDataGrid);
    SaveFileDialog sfd = new SaveFileDialog()
    {
    DefaultExt = "csv",
    Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
    FilterIndex = 1
    };
    if (sfd.ShowDialog() == true)
    {
    using (Stream stream = sfd.OpenFile())
    {
        using (StreamWriter writer = new StreamWriter(stream)) {
    	writer.Write(data);
    	writer.Close();
        }
        stream.Close();
    }
    }
}

private string FormatCSVField(string data) {
    return String.Format("\"{0}\"",
    	data.Replace("\"", "\"\"\"")
    	.Replace("\n", "")
    	.Replace("\r", "")
        );
}

public string ExportDataGrid(bool withHeaders, DataGrid grid)
{
    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("\r\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;
    	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();
}

这篇关于Silverlight的DataGrid中:导出到Excel或CSV的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆