Silverlight DomainDataSource в коде позади не загружает все строки - PullRequest
1 голос
/ 03 сентября 2010

У меня есть источник данных домена в 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. После перехода на следующую страницу все объекты загружаются так, как они должны быть.

Я новичок в Silverlight и понятия не имею, что здесь происходит. Я загружаю данные неправильно? Есть идеи?

1 Ответ

3 голосов
/ 17 декабря 2010

Такое поведение может быть вызвано неправильным набором атрибута 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), поскольку он должен быть уникальным для всех строк.

Решение

Удалите атрибут Key из поля, которое будет иметь повторяющиеся значения (BookId), и установите его в поле, которое будет иметь уникальные значения для всех строк (вы можете добавить некоторый столбец, например 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

После этого вы должны увидеть все строки, возвращаемые запросом. Надеюсь, это поможет:)

...