1

我有一个 RadComboBox 一次加载 10 个项目(来自几百个项目)。为简单起见,数据源是一个List<Person>where:

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

我的服务和存储库方法List<Person>在它已经排序(按名称)和分页(每个请求 10 个项目)之后返回。我的问题是数据中的某处是“登录”用户的名称(我有该用户的 ID)。我需要在列表顶部显示那个人(第一页,第一项。)

解决此问题的最佳方法是什么?

我想到了以下几点:

  • 在第一组显示 1-11 而不是 1-10,将“登录”用户放在顶部
  • 从查询中省略登录用户并在之后添加它们
4

1 回答 1

1

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