我试图基本上将网格内容导出到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)
我在上面添加了很多试验和错误,这可能并不理想。尽管如此,我无法获得Stream(任何流)来填充数据,并且不会产生错误。两个流(我添加了一个用于测试)都有一个空缓冲区。
问题似乎与GridView有关 - 当我检查Columns属性时Count = 0 ...我可能需要手动设置动态GridViews(然后导出可能会正常工作)
我用
Imports DevExpress
Imports DevExpress.XtraPrinting
答案 0 :(得分:1)
您正在以错误的方式使用GridControl。它是一个可视组件,并不打算作为后台服务来生成报告。 XtraReports库更适合您的要求。
如果您喜欢自己的方式,请尝试将GridControl添加到可见的Form或UserControl中。您可以使GridControl不可见或将其隐藏在其他可视组件下。将GridControl添加到Form所需的唯一内容是使用BindingContext实例初始化它。
答案 1 :(得分:0)
要使其正常工作,您需要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()