[英]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.