我们有一个从服务器获取报告并将其返回给 Silverlight GUI 的 Web 服务。在 GUI 中,我们有一个事件处理程序,它调用以下函数:
private void PopulateDataGrids()
{
try
{
reportTitle = reportDataUtil.ReportHeader.Rows.First(r => r.Items[ReportTools.FIELDNAME_STRING].ToString() == ReportTools.FIELDVALUE_TITLE).Items[ReportTools.FIELDVALUE_STRING].ToString();
dg_Report_Header.DataSource = reportDataUtil.ReportHeader;
dg_Report_Header.CanUserSortColumns = false;
dg_Report_Header.CanUserReorderColumns = false;
dg_Report_Header.CanUserResizeColumns = true;
dg_Report_Header.DataBind();
dg_Report_Header.UpdateLayout();
dg_Report_Detail.DataSource = reportDataUtil.ReportDetails;
dg_Report_Detail.CanUserSortColumns = true;
dg_Report_Detail.CanUserReorderColumns = true;
dg_Report_Detail.CanUserResizeColumns = true;
dg_Report_Detail.DataBind();
dg_Report_Detail.UpdateLayout();
//Hide the ElementID colmun
if (dg_Report_Detail.Columns.Count > 0)
{
var col = dg_Report_Detail.Columns.FirstOrDefault(dc => dc.Header.ToString() == NetVisSolution.Reports.ReportTools.COLUMNNAME_ELEMENTID);
if (col != null)
{
col.Visibility = System.Windows.Visibility.Collapsed;
}
}
}
catch (Exception)
{
ClearResources();
closeReportDataViewer();
ErrorWindow.CreateNew("Unable to open selected report data, the file maybe corrupted or not \nin the server specified location.");
//throw new Exception(ex.Message, ex.InnerException);
}
}
麻烦的是,明细表可能有 14000 行长,占用超过一兆字节。加载此类报告时,dg_Report_Detail.DataBind(); 调用需要几分钟并锁定 GUI。
是否有一种简单的方法可以异步或以应用程序保持响应的方式执行此操作?
提前致谢,
--- 阿利斯泰尔。