Question

I have a RadComboBox that loads 10 items at a time (from a couple hundred items). For simplicity sake, the datasource is a List<Person> where:

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

My service and repository methods return the List<Person> after it has already been sorted (by Name) and paged (10 items per request). My problem that somewhere within the data is the Name of the "logged in" user (I have the ID for that user). I need to show that person at the top of the list (first page, first item.)

What is the best way to go about this?

I have thought of the following:

  • Show 1-11 instead of 1-10 on the first set, throwing the "logged in" user at the top
  • Omit the logged in user from the query and add them in after
Was it helpful?

Solution

If you already have the data you need for that user, you can add a "fake" user object to the top and handle everything in the paging:

(code not tested, written in 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;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top