Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net silverlight中数据网格的CSV导出类_.net_Vb.net_Silverlight_Silverlight 4.0 - Fatal编程技术网

.net silverlight中数据网格的CSV导出类

.net silverlight中数据网格的CSV导出类,.net,vb.net,silverlight,silverlight-4.0,.net,Vb.net,Silverlight,Silverlight 4.0,我一直在尝试将Silverlight中的一些数据网格导出到excel,但到目前为止都没有成功。所以现在我只是想让它们导出为csv文件,然后可以在excel中打开。我创建了一个类来导出数据网格,它确实导出并保存了一个csv文件。但是,csv文件不包含任何数据 Imports System.IO Public Class clsExportData 'Public Shared Sub Export(dg As DataGrid) ' SaveExportedGrid(Expor

我一直在尝试将Silverlight中的一些数据网格导出到excel,但到目前为止都没有成功。所以现在我只是想让它们导出为csv文件,然后可以在excel中打开。我创建了一个类来导出数据网格,它确实导出并保存了一个csv文件。但是,csv文件不包含任何数据

Imports System.IO

Public Class clsExportData
   'Public Shared Sub Export(dg As DataGrid)
   '    SaveExportedGrid(ExportDataGrid(True, dg))
   'End Sub


Public Shared Sub Export(dg As DataGrid, withHeaders As Boolean)
    SaveExportedGrid(ExportDataGrid(withHeaders, dg))
End Sub

Private Shared Sub SaveExportedGrid(data As String)
    Dim sfd As New SaveFileDialog()
    sfd.DefaultExt = "csv"
    sfd.Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*"
    sfd.FilterIndex = 1

    If If(sfd.ShowDialog(), False) Then
        Using sr As New StreamWriter(sfd.OpenFile())
            sr.Write(data)
        End Using
    End If
End Sub

Private Shared Function ExportDataGrid(withHeaders As Boolean, grid As DataGrid) As String
    Dim colPath As String
    Dim propInfo As System.Reflection.PropertyInfo
    Dim binding As System.Windows.Data.Binding
    Dim strBuilder As New System.Text.StringBuilder()
    Dim source As System.Collections.IList = TryCast(grid.ItemsSource, System.Collections.IList)
    If source Is Nothing Then
        Return ""
    End If

    Dim headers As New List(Of String)()
    grid.Columns.ToList().ForEach(Function(col)
                                      If TypeOf col Is DataGridBoundColumn Then
                                          headers.Add(FormatCSVField(col.Header.ToString()))
                                      End If

                                  End Function)
    strBuilder.Append([String].Join(",", headers.ToArray())).Append(vbCr & vbLf)

    For Each data As [Object] In source
        Dim csvRow As New List(Of String)()
        For Each col As DataGridColumn In grid.Columns
            If TypeOf col Is DataGridBoundColumn Then
                binding = TryCast(col, DataGridBoundColumn).Binding
                colPath = binding.Path.Path
                propInfo = data.[GetType]().GetProperty(colPath)
                If propInfo IsNot Nothing Then
                    csvRow.Add(FormatCSVField(propInfo.GetValue(data, Nothing).ToString()))
                End If
            End If
        Next
        strBuilder.Append([String].Join(",", csvRow.ToArray())).Append(vbCr & vbLf)
    Next

    Return strBuilder.ToString()
End Function

Private Shared Function FormatCSVField(data As String) As String
    Return [String].Format("""{0}""", data.Replace("""", """""""").Replace(vbLf, "").Replace(vbCr, ""))
End Function

结束类

请尝试以下方法

Dim source As System.Collections.IEnumerable = TryCast(grid.ItemsSource, System.Collections.IEnumerable)
If source Is Nothing Then
    Return ""
End If
此外,请确保使用调试器逐步完成代码,并查看失败的地方