DevExpress ExportToText / ExportToCSV 无法生成流

DevExpress ExportToText / ExportToCSV fail to produce stream

我正在尝试基本上将网格内容导出到 CSV 文件。数据源检查正常,因为我将完全相同的 SQL 传递给物理网格并且它很好。但是当我尝试动态创建网格和视图 - 并导出内容时 - 永远不会填充流。 (长度 = 0)

Dim opts As New DevExpress.XtraPrinting.TextExportOptions
Dim grdGrid As New XtraGrid.GridControl
Dim gdvGrid As New XtraGrid.Views.Grid.GridView(grdGrid)

grdGrid.Name = "Grid1"
grdGrid.DataSource = dtsDataset.Tables(0)
grdGrid.MainView = gdvGrid

gdvGrid.Name = "GridView1"
gdvGrid.OptionsView.ColumnAutoWidth = False
gdvGrid.BestFitColumns()
gdvGrid.OptionsPrint.PrintFooter = False

gdvGrid.OptionsPrint.PrintDetails = True
gdvGrid.OptionsPrint.ExpandAllDetails = True
gdvGrid.RefreshData()

opts.QuoteStringsWithSeparators = True
opts.TextExportMode = XtraPrinting.TextExportMode.Text

Dim tryStream As New IO.MemoryStream

gdvGrid.ExportToText(tryStream, opts)

gdvGrid.ExportToCsv(tryStream)

我在上面添加了很多尝试和错误,这可能并不理想。尽管如此,我无法让流(任何流)填充数据并且不会产生任何错误。两个流(我添加一个用于测试)都有一个空缓冲区。

问题似乎出在 GridView - 当我检查列时 属性 Count = 0 ...我可能需要帮助正确设置动态 GridView(然后导出可能会正常工作)

我用

Imports DevExpress
Imports DevExpress.XtraPrinting

您以错误的方式使用了 GridControl。它是一个可视化组件,并不打算用作生成报告的后台服务。 XtraReports 库更符合您的要求。

如果您喜欢自己的方式,请尝试将 GridControl 添加到可见的 Form 或 UserControl。您可以使 GridControl 不可见或将其隐藏在其他可视组件下。将 GridControl 添加到 Form 所需要做的唯一事情就是使用 BindingContext 实例对其进行初始化。

要使其正常工作,您需要 BindingContext 的额外行,如下所示: (ForceInitialize 在此上下文中不是必需的,但在其他上下文中 - 例如在 Form Load 中 - 它非常有用 - 所以我原封不动地保留它)

Dim grdGrid As New XtraGrid.GridControl 
Dim gdvGrid As New XtraGrid.Views.Grid.GridView(grdGrid)


grdGrid.Name = "Grid1"
grdGrid.DataSource = dtsDataset.Tables(0)
grdGrid.MainView = gdvGrid

' These TWO lines below are ESSENTIAL to 
' actually get the GridView to fill with the Data
' if the Grid and View is not created on a physical form
grdGrid.BindingContext = New BindingContext
grdGrid.ForceInitialize()