2010-01-20 103 views
2

的我有了一個DataGrid和DataPager的Silverlight應用程序。這些控件的數據源來自數據庫。我通過RIA服務訪問這個數據庫。Silverlight的 - 無法加載大量數據

當我嘗試加載所有記錄時,收到一個錯誤消息: 「加載操作失敗,查詢'GetData'服務器沒有提供有意義的回覆;這可能是由於合同不匹配造成的,過早會話關機或內部服務器錯誤。「

通過逐步將結果限制在服務器端設置的大小,我來,因爲我的數據集太大,我收到此錯誤的結論。我的問題是,我如何優雅地將大型數據集加載到DataGrid中?我願意接受RIA Services以外的方式。

謝謝!

回答

1

首先,如果您有辦法並且不需要自己編寫此代碼,請考慮購買解決您問題的UI組件(找到開放源代碼解決方案)。對於這些類型的任務,其他人很有可能花費大量精力來解決像這樣的問題。僅供參考,Silverlight的teleric網格控件帶有一些演示。

如果你不能買到一個組成部分,這裏有一些方法我已經看到了:

  • 建立一個尋呼系統,其中 當前頁面數據載入 ,以及新的數據不加載 直到頁面切換。你 大概可以緩存以前的結果 ,使這項工作更加順暢。
  • 需要時加載數據,因此當用戶向下/向側滾動時,一旦到達沒有加載數據的單元格,就會加載數據。

想到的最後一個想法是在發送之前將服務器上的數據gzip。如果您的瓶頸是傳輸時間,那麼壓縮速度會影響您正在使用的數據類型。

0

您應該考慮到您的數據源可能超出命令超時。 LINQ to SQL的默認值是30秒。如果你想增加這個,一個選項是去構造函數並且改變它如下:

public SomeDataClassesDataContext() : 
       base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString, mappingSource) 
     { 
      this.CommandTimeout = 1200; 
      OnCreated(); 
     }