RadComboBox按需加载带有“粘性”项目

时间:2011-01-14 03:10:14

标签: c# sorting pagination repository radcombobox

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

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

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

最好的方法是什么?

我想到了以下几点:

  • 在第一组上显示1-11而不是1-10,将“登录”用户抛到顶部
  • 从登录用户中删除 查询并在
  • 之后添加它们

1 个答案:

答案 0 :(得分:1)

如果您已拥有该用户所需的数据,则可以添加&#34;假冒&#34;用户对象到顶部并处理分页中的所有内容:

(未经过测试的代码,用记事本++编写)

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;
    }
}