2011-01-14 7 views
1

Ich habe eine RadComboBox, die 10 Artikel gleichzeitig lädt (aus ein paar hundert Artikel). Der Einfachheit halber ist die Datenquelle ein List<Person> wo:RadComboBox Load-On-Demand w/"sticky" Artikel

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

Mein Service und Repository-Methoden, um die List<Person> zurückkehren, nachdem sie bereits (nach Namen) sortiert worden und ausgelagert (10 Stück pro Anfrage). Mein Problem, dass irgendwo innerhalb der Daten der Name des "eingeloggten" Benutzers ist (ich habe die ID für diesen Benutzer). Ich muss diese Person an der Spitze der Liste (erste Seite, erster Artikel) zeigen.

Was ist der beste Weg, um darüber zu gehen?

Ich habe gedacht, die folgenden Möglichkeiten:

  • anzeigen 11.01 statt 10.01 auf dem ersten Satz, der „angemeldet“ Benutzer an der Spitze
  • Auslassen der angemeldete Benutzer zu werfen aus die Abfrage und fügen Sie sie in nach
+1

Haben Sie bereits dieses Benutzerobjekt oder Position? oder Sie müssen es von der Liste holen. –

+0

@Die Scrum Meister - Ich muss es holen, obwohl ich technisch alle Daten habe, die ich für diesen Benutzer abrufen müsste. Hmm, du könntest etwas machen! –

Antwort

1

Wenn Sie bereits die Daten, die Sie für diesen Benutzer benötigen haben, können Sie ein „fake“ Benutzerobjekt nach oben hinzufügen und haben alles im Griff in der Paging:

(Code nicht getestet, in Notepad geschrieben ++)

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