2011-01-14 6 views
1

私は一度に10アイテム(数百アイテムから)をロードするRadComboBoxを持っています。単純化のために、データソースがList<Person>どこにある:それはすでに(名前による)ソートやページングされた後RadComboBoxロードオンデマンドで「スティッキー」アイテム

public class Person 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

マイサービスとリポジトリの方法は(リクエストあたり10項目)List<Person>を返します。私の問題は、データのどこかが「ログインした」ユーザーの名前(私はそのユーザーのIDを持っている)です。その人をリストの先頭に表示する必要があります(最初のページ、最初の項目)

これについては、どのような方法が最適ですか?

私は、次を考えていますからログインしているユーザー

  • ではなく、最初のセットの1-10の1-11を表示、トップ
  • 省略でユーザー「ログイン」投げ クエリとあなたはすでにあなたがそのユーザーのために必要なデータを持っている場合は、先頭に「偽」のユーザーオブジェクトを追加し、ページングですべてを処理することができます
+1

あなたはすでにこのユーザーオブジェクトまたは位置を持っていますか?リストから取得する必要がありますか? –

+0

@ The Scrum Meister - 私はそれをフェッチする必要がありますが、私は技術的に私はそのユーザーのために取得する必要があるすべてのデータを持っています。うーん、あなたは何かに乗っているかもしれない! –

答えて

1

後にそれらを追加します。

(コードはテストされておらず、メモ帳++で書かれています)

public class DummyPagerRepo 
{ 
    private List<Person> persons; 
    private Person userObject; 
    private int userIndex = -1; 

    public DummyPagerRepo(List<Person> persons, Person userObject) 
    { 
     this.persons = persons; 
     this.userObject = userObject; 
    } 

    public List<Person> GetPage(int pageSize, int pageOffset) 
    { 
     List<Person> results = new List<Person>(pageSize); 
     int start = pageOffset * pageSize; 
     if(pageOffset == 0) 
     { 
      result.add(userObject); 
      start++; 
     } 
     int end = Math.Min(persons.length, pageSize * (pageOffset + 1)); 
     for(int i = start; i < end; i++) 
     { 
      Person person = persons[i]; 
      if(userIndex == -1 && person.ID == userObject.ID) 
      { 
       userIndex = i; 
      } 
      else if(userIndex != i) 
      { 
       resutls.Add(person); 
      } 
     } 

     if(userIndex != -1 && start <= userIndex && end > userIndex && end < persons.length) 
     { 
      results.add(persons[end]); 
     } 
     return results; 
    } 
} 
関連する問題