代码隐藏中的Silverlight DomainDataSource不加载所有行

时间:2010-09-02 21:10:24

标签: silverlight-4.0 domaindatasource

我在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的新手,并且不知道这里发生了什么。我加载数据错了吗?有什么想法吗?

1 个答案:

答案 0 :(得分:3)

此行为可能是由模型类中错误的属性集引起的。如果在结果查询中,具有字段的行是重复的,则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属性,并将其设置为将具有所有行的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

之后,您应该看到查询返回的所有行。 希望这会有所帮助:)