簡體   English   中英

具有linq和多項選擇的列表框

[英]Listbox with linq and multiple selection

有2個列表框:患者和會話。 根據第一個選擇中的多項選擇,需要在第二個中顯示過濾后的信息(使用linq查詢)。

帶注釋的字符串有效,但只允許在第一個列表框中選擇一個項目。

我絕對知道它成功收集了Patients to List變量,但是當我使用Contains時,第二個列表框為空。

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

會話和dbContext類的定義:

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
        {
        ...
        }
    }

我不知道您的listbox1中具有哪種類型的元素。 我假設類型名為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";
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM