1

Silverlight 4 にドメイン データ ソースがあります。コード ビハインドで設定し、RadDataPager と RadGridView も使用しています。

DomainDataSource dds = new DomainDataSource();

dds.QueryName = "MyQueryName";
dds.DomainContext = ctx;
dds.LoadSize = 10;
dds.PageSize = 10;
dds.AutoLoad = true;

radDataPager1.PageSize = 10;
radDataPager1.Source = dds.Data;
radGridView1.ItemsSource = dds.Data;

dds.Load();

これが初めてロードされるとき、dds.Data.Count は 8 であり、dds.Data.PageSize が 10 であっても、グリッド ビューには 8 項目しか表示されません。次のページに移動した後、10 個のオブジェクトすべてがロードされます。彼らがそうであるように。

私は Silverlight を初めて使用し、ここで何が起こっているのかわかりません。データの読み込みが間違っていますか? 何か案は?

4

1 に答える 1

3

この動作は、モデル クラスのKey属性のセットが間違っていることが原因である可能性があります。結果のクエリで、キーフィールドを持つ行が重複している場合、DataGrid は最初にのみ取得します。

例 (書店情報): 結果クラス (BookPriceInfo.cs) は次のようになります。

    public class BookPriceInfo {
      [DataMember]
      [Key]
      public int BookId { get; set; }
      [DataMember]
      public string Name {get; set; }
      [DataMember]
      public string StoreName {get; set;}
      [DataMember]
      public decimal Price {get; set;}
   }

また、データベースから返されたクエリ結果がある場合:

BookId | Name | StoreName | Price 
1 | book1 | store1 | 70.00
1 | book1 | store2 | 69.99
2 | book2 | store1 | 40.00
2 | book2 | store2 | 39.99

次に、DataGrig はこれのみを表示します。

BookId | Name | StoreName | Price 
1 | book1 | store1 | 70.00  
2 | book2 | store1 | 40.00

これは、DataGrid がKey(同じ BookId を持つすべての行から最初の行のみを取得する) とマークされたフィールドによって結果を「区別」するために発生します。これは、すべての行に対して一意である必要があるためです。

解決

重複する値 (BookId) を持つフィールドから属性を削除Keyし、すべての行に一意の値を持つフィールドに設定します (Uniqe になる BookPriceId のような列を追加できます)。

    public class BookPriceInfo {
      [DataMember]
      public int BookId { get; set; }
      [DataMember]
      public string Name {get; set; }
      [DataMember]
      public string StoreName {get; set;}
      [DataMember]
      public decimal Price {get; set;}
      [DataMember]
      [Key]
      public int BookPriceId {get; set;}
   }

クエリ結果:

BookPriceId | BookId | Name | StoreName | Price 
1 | 1 | book1 | store1 | 70.00
2 | 1 | book1 | store2 | 69.99
3 | 2 | book2 | store1 | 40.00
4 | 2 | book2 | store2 | 39.99

その後、クエリによって返されたすべての行が表示されます。お役に立てれば :)

于 2010-12-17T10:57:40.607 に答える