将超过 100000 行导出到 Excel - Infragistics Excel 导出器



我正在使用启用了 xml LoadOnDemand和分页的 ultrawebgrid v11.1 来加载超过 100,000 条记录。

我在InitializeDataSource事件中编写了BindGrid()功能。

在每次回发(

保存,Excel导出,加载.)和/或部分回发(页面导航,排序,过滤..)中,我从数据库中获取超过100,000条记录并设置网格的数据源。

问题 1:

每次从数据库中查询大量数据都会花费更多时间。有没有办法只查询一次数据on load,然后在网格中的数据被修改时查询。

问题 2:

我正在使用UltrawebgridExcelExporter v11.1.单击"导出"按钮后,网格的数据源将在InitializeDataSource内初始化,并从数据库中获取超过 100,000 条记录。

我必须知道,当设置xml LoadOnDemand时,每次导出到 excel 时,我都应该设置

AllowPaging = False  
and
LoadOndemand = LoadOnDemand.NotSet

然后绑定网格和导出。

从数据库中获取大量数据需要很长时间,绑定它需要更长的时间。绑定后,在导出到 excel 时会抛出'System Out of Memory'异常。

问题 3:

不确定即使在解决上述问题后,我是否能够在Excel 65535-97中导出超过2003行?

如何使用 xml LoadOnDemand优化网格所有操作的性能。

法典:

Protected Sub UWGrid_InitializeDataSource(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.UltraGridEventArgs) Handles UWGrid.InitializeDataSource
UWGrid.DataSource = dsData 'record set with 100000 rows.
End Sub
Protected Sub btnExportToExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportToExcel.Click
UWGrid.DisplayLayout.Pager.AllowPaging = False
UWGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.NotSet
UWGrid.DataBind()
'Dim wBook As New Excel.Workbook(Excel.WorkbookFormat.Excel2007)
UltraWebGridExcelExporter1.DownloadName = "ExportFile.xls"
UltraWebGridExcelExporter1.Export(UWGrid)
End Sub

回答问题 3 - 65535 行不是基础设施的限制,而是 Excel 97/2003 格式的限制。唯一的解决方法是以Excel 2007+格式(XLSX)导出

Infragistics的回复是将记录拆分到多个工作簿中。因为存在不允许超过 65535 行的限制。

尽管他们的新WebGrids解决了该限制,但我通过导出到CSV文件解决了我的限制。

所以这个问题没有明确的答案,只能解决:)

private void Form1_Shown(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Serial number");
        dt.Columns.Add("Name");
        dt.Columns.Add("Values");
        for (int i = 0; i < 500; i++)
        {
            dt.Columns.Add("Column" + i.ToString());
        }
        for (int i = 0; i < 100000; i++)
        {
            dt.Rows.Add(i.ToString(), "Jipson PJ", (i + 100).ToString());
        }
        ultraGrid1.DataSource = dt;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Workbook w = new Infragistics.Excel.Workbook();
        //w.CurrentFormat = WorkbookFormat.Excel2007;
        w.Worksheets.Add(this.Text);
        this.ultraGridExcelExporter1.FileLimitBehaviour = Infragistics.Win.UltraWinGrid.ExcelExport.FileLimitBehaviour.TruncateData;
        this.ultraGridExcelExporter1.Export(this.ultraGrid1, w.Worksheets[this.Text]);
        w.Save("C://Users//jipso//Documents//excel//1.xls"); // Save as .xlsx file name.
    }

最新更新