Silverlight DataGrid:导出到excel或csv

22 c# asp.net silverlight datagrid

有没有办法可以将我的Silverlight DataGrid数据导出到excel或csv?

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

非常感谢

t3r*_*rse 21

Silverlight 3更改了此问题的答案,因为它使用户能够在用户桌面上的指定位置创建文件.我调整了DaniCE提交的代码,将一些内容分成了一些可读性方法,并使用了Excel应该识别的松散定义的CSV格式.

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();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果在装订线上出现错误,请尝试按以下方式进行铸造:binding =(System.Windows.Data.Binding)((Microsoft.Windows.Controls.DataGridBoundColumn)col).Binding; (2认同)

Dav*_*sky 2

我不认为 Silverlight 提供了下载文件的方法。您可以向应用程序添加一个调用 URL 的按钮 - 即http://www.mysite.com/generateexcelfile.aspx。将用于生成在 Silverlight 应用程序中显示的数据的参数包含为查询字符串值,运行查询并使用您最喜欢的 Excel 文件生成组件动态生成文件。重定向到它,它将下载到用户的系统。

  • 请小心“创建文件,然后重定向到它”——您必须在某个时候删除这些文件。更好的做法是使用正确的 mime 类型将 Excel 保存到 .aspx 页面的输出流中,以便浏览器可以看到它是 Excel 文件,而不是 html 页面,并为用户提供保存它的选项。 (3认同)