radcombobox load-on-demand w/ "Sticky」アイテム
-
11-10-2019 - |
質問
一度に10個のアイテムをロードするRadComboBoxがあります(数百個のアイテムから)。簡単にするために、データソースはaです List<Person>
どこ:
public class Person
{
public string Name { get; set; }
public int ID { get; set; }
}
私のサービスとリポジトリのメソッドが返されます List<Person>
すでに(名前で)並べ替えられ、ページ(リクエストごとに10項目)があります。データ内のどこかに「ログインしている」ユーザーの名前があるという私の問題(そのユーザーにIDがあります)。リストの一番上にいる人を示す必要があります(最初のページ、最初のアイテム)。
これを行うための最良の方法は何ですか?
私は次のことを考えました:
- 最初のセットで1-10の代わりに1-11を表示し、上部に「ログインした」ユーザーを投げます
- クエリからログインしたユーザーを省略し、後に追加します
解決
そのユーザーに必要なデータを既に持っている場合、「偽の」ユーザーオブジェクトを上部に追加して、ページング内のすべてを処理できます。
(テストされていないコード、メモ帳++で書かれています)
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;
}
}
所属していません StackOverflow