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,网格视图中仅显示 8 个项目,即使 dds.Data.PageSize 为 10。在我翻到下一页后,所有 10 个对象都已加载就像他们应该的那样。

我是 Silverlight 的新手,不知道这里发生了什么。我加载数据错误吗?有任何想法吗?

4

1 回答 1

3

此行为可能是由模型类中的错误Key属性集引起的。如果在结果查询中,具有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 的所有行中获取第一行),因为它应该是所有行的 uniq。

解决方案

从具有重复值(BookId)的字段中删除Key属性,并将其设置为所有行都具有唯一值的字段(您可以添加一些列,如 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 回答