我在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很陌生,不知道这是怎么回事。我把数据加载错了吗?有什么想法吗?
发布于 2010-12-17 10:57:40
此行为可能是由于模型类中的键属性集合错误造成的。如果在结果查询中,具有键字段的行被复制,那么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。
解决方案
从具有重复值( Key )的字段中删除BookId属性,并将其设置为所有行都具有uniqe值的字段(您可以添加一些列,比如BookPriceId,它将是uniqe)。
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之后,您将看到查询返回的所有行。希望这会有所帮助:)
https://stackoverflow.com/questions/3631299
复制相似问题