我在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的新手,并且不知道这里发生了什么。我加载数据错了吗?有什么想法吗?
答案 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
之后,您应该看到查询返回的所有行。 希望这会有所帮助:)