RadComboBox Load-On-Demand с «липким» элементом - PullRequest
1 голос
/ 14 января 2011

У меня есть RadComboBox, который загружает 10 элементов одновременно (из пары сотен элементов).Для простоты источником данных является List<Person>, где:

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

Мои методы обслуживания и репозитория возвращают List<Person> после того, как он уже отсортирован (по имени) и разбит на страницы (10 элементов на запрос),Моя проблема в том, что где-то в данных есть Имя пользователя, вошедшего в систему (у меня есть идентификатор для этого пользователя).Мне нужно показать этого человека вверху списка (первая страница, первый элемент).

Как лучше всего это сделать?

Я думал о следующем:

  • Показывать 1-11 вместо 1-10 в первом наборе, бросая «залогиненного» пользователя вверху
  • Пропустить зарегистрированного пользователя из запроса и добавить его после

1 Ответ

1 голос
/ 14 января 2011

Если у вас уже есть данные, необходимые для этого пользователя, вы можете добавить в верхнюю часть «поддельный» пользовательский объект и обработать все в подкачке:

(код не проверен, записан в 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;
    }
}
...