1

一度に10個のアイテムをロードするRadComboBoxがあります(数百個のアイテムから)。簡単にするために、データソースは次のList<Person>場所にあります。

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

私のサービスメソッドとリポジトリメソッドは、List<Person>(名前で)並べ替えられてページングされた後(リクエストごとに10アイテム)を返します。データ内のどこかに「ログインした」ユーザーの名前があるという私の問題(私はそのユーザーのIDを持っています)。その人をリストの一番上に表示する必要があります(最初のページ、最初のアイテム)。

これを行うための最良の方法は何ですか?

私は次のことを考えました:

  • 最初のセットで1-10ではなく1-11を表示し、「ログインした」ユーザーを一番上に表示します
  • ログインしたユーザーをクエリから除外し、後に追加します
4

1 に答える 1

1

そのユーザーに必要なデータがすでにある場合は、「偽の」ユーザーオブジェクトを上部に追加して、ページング内のすべてを処理できます。

(コードはテストされておらず、notepad ++で記述されています)

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;
    }
}
于 2011-01-14T04:39:12.040 に答える