2016-05-17 10 views
0

Got 2 Listboxen: Patienten und Sitzungen. Notwendigkeit, gefilterte (mit Linq-Abfrage) Informationen in der zweiten anzuzeigen, basierend auf Mehrfachauswahl in der ersten.Listbox mit Linq und Mehrfachauswahl

Kommentierte Zeichenfolge funktioniert, aber nur ein Element in der ersten Listbox ausgewählt werden kann.

Ich weiß auf jeden Fall, dass es erfolgreich Patienten zu List-Variablen erfasst, aber wenn ich Contains verwendet, ist die zweite Listbox leer.

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataClasses1DataContext dbContext = new DataClasses1DataContext(); 
    List<string> selectedItems = (from object o in listBox1.SelectedItems select listBox1.GetItemText(o)).ToList(); 
    listBox2.DataSource = dbContext.Sessions 
    //.Where(pID => pID.PatientID == listBox1.GetItemText(listBox1.SelectedValue)) 
     .Where(pID => selectedItems.Contains(pID.PatientID)); 
    listBox2.DisplayMember = "Start"; 
    listBox2.ValueMember = "SessionID"; 
} 

Session und DbContext Klassendefinitionen:

public partial class Session : INotifyPropertyChanging, INotifyPropertyChanged 
    { 
    ... 
    public int SessionID 
     { 
     ... 
     } 
    public string PatientID 
     { 
     ... 
     } 
    } 

public partial class DataClasses1DataContext : System.Data.Linq.DataContext 
    { 
    ... 
    public System.Data.Linq.Table<Session> Sessions 
     { 
     ... 
     } 
    } 
+0

was Ihre Ausnahme? –

+0

Keine Ausnahmen, es lädt nur empty listBox2. – Artem

Antwort

0

Ich weiß nicht, welche Art von Element, das Sie in Ihrem ListBox1 haben. Ich nahm an, der Typ heißt Session:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DataClasses1DataContext dbContext = new DataClasses1DataContext(); 
     List<string> selectedItems = (from object o in listBox1.SelectedItems select listBox1.GetItemText(o)).ToList(); 
     listBox2.DataSource = dbContext.Sessions 
      .Where(pID => listBox1.SelectedItems.OfType<Session>().Select(x => x.PatientID).Contains(pID.PatientID)); 
     listBox2.DisplayMember = "Start"; 
     listBox2.ValueMember = "SessionID"; 
    } 
+0

Immer noch nichts in listBox2 angezeigt :( – Artem

+0

welcher Typ ist 'dbContext.Sessions' und' PatientID'? Kannst du mehr Code in deiner Frage? –

+0

Fertig. Ist das ok? Ich bin ein Neuling, sorry. – Artem

Verwandte Themen