0

サーバーからレポートを取得して 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 行になり、1 メガバイト以上を占めることです。このようなレポートが読み込まれると、dg_Report_Detail.DataBind(); 呼び出しには数分かかり、GUI がロックされます。

これを非同期で行う簡単な方法、またはアプリケーションの応答性を維持する方法はありますか?

前もって感謝します、

--- アリステア。

4

1 に答える 1

0

DataGrid は行の仮想化を実装していますが、各行の高さを個別に計算するために多くの時間を費やす可能性があります。RowHeight を割り当てると、これらの計算がすべてスキップされます。

  <sdk:DataGrid AutoGenerateColumns="False" RowHeight="20">
  </sdk:DataGrid>
于 2013-05-23T23:44:09.257 に答える