【问题标题】:RadComboBox Load-On-Demand w/ "sticky" item带有“粘性”项目的 RadComboBox 按需加载
【发布时间】:2011-06-08 22:15:41
【问题描述】:

我有一个 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,将“已登录”用户置于顶部
  • 从 查询并添加到后面

【问题讨论】:

  • 您是否已经拥有此用户对象或职位?或者你需要从列表中获取它。
  • @The Scrum Meister - 我需要获取它,尽管从技术上讲,我拥有为该用户获取的所有数据。嗯,你可能正在做点什么!

标签: c# sorting pagination repository radcombobox


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2012-11-25
    • 2021-09-06
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多