C# 如何从列表框中删除项并在实体中反映更改
我试图将一个实体绑定到一个列表框,当我从该实体中删除某些内容时,我希望它反映在列表框中 以下是一段代码片段:C# 如何从列表框中删除项并在实体中反映更改,c#,data-binding,listbox,entity-framework-6,C#,Data Binding,Listbox,Entity Framework 6,我试图将一个实体绑定到一个列表框,当我从该实体中删除某些内容时,我希望它反映在列表框中 以下是一段代码片段: SportsClubEntities spe = new SportsClubEntities BindingSource bs = new BindingSource(); var stm = from xyz in spe.SomeEntity where xyz.prop == 66 select new { Name = xyz.name, rec = x
SportsClubEntities spe = new SportsClubEntities
BindingSource bs = new BindingSource();
var stm =
from xyz in spe.SomeEntity where xyz.prop == 66
select new { Name = xyz.name, rec = xyz }
bs.DataSource = stm.ToList();
ListBox.DataSource = bs;
ListBox.DisplayMember = "Name";
ListBox.ValueMember = "rec";
我有一个按钮,当我单击它时,我希望它删除列表框中的选定项,但更重要的是,我希望它从基础实体中删除该项。ie:当xyz被选中并从列表框中删除时,我希望xyz从spe中删除
如果我做了一个bs.Remove(item)
从列表框中删除该项(当我调用bs.ResetBindings()
时),但它不会更新实体(spe.SomeEntity
)。起初,我以为会,但后来我意识到LINQ是一个查询,返回一些结果
当我单击删除按钮时,我可以执行spe.SomeEntity.remove(item)
,但是列表框不会得到更新
有并没有一种方法可以只对其中一个进行删除,并对它们进行更新
我这样做完全错了吗?有没有某种“标准”的方式来做这种事情
我无法将spe.SomeEntity.ToList()直接绑定到列表框,因为我需要实体中记录的子集
感谢您的帮助,我仍在学习。以下是您可以做到的:
private void Form1_Load(object sender, EventArgs e)
{
list1 = new List<Person>();
using (SportsClubEntities spe = new SportsClubEntities())
{
list1 = (from p in spe.People
select p).ToList();
}
bs = new BindingSource();
bs.DataSource = list1;
listBox1.DataSource = bs;
listBox1.DisplayMember = "FirstName";
}
private void button1_Click(object sender, EventArgs e)
{
Person p1 = (Person)listBox1.SelectedItem;
list1.Remove((Person)listBox1.SelectedItem);
bs.ResetBindings(false);
using (SportsClubEntities spe = new SportsClubEntities())
{
Person p2 = (from p in spe.People
where p.BusinessEntityID == p1.BusinessEntityID
select p).FirstOrDefault();
spe.People.Remove(p2);
spe.SaveChanges();
}
}
private void Form1\u加载(对象发送方,事件参数e)
{
list1=新列表();
使用(SportsClubEntities spe=新的SportsClubEntities())
{
list1=(来自spe.People中的p
选择p.ToList();
}
bs=新的BindingSource();
bs.DataSource=list1;
listBox1.DataSource=bs;
listBox1.DisplayMember=“FirstName”;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
人员p1=(人员)列表框1.SelectedItem;
列表1.删除((个人)列表框1.选择编辑项);
重置绑定(错误);
使用(SportsClubEntities spe=新的SportsClubEntities())
{
人员p2=(来自spe.人员中的p
其中p.BusinessEntityID==p1.BusinessEntityID
选择p).FirstOrDefault();
spe.People.Remove(p2);
spe.SaveChanges();
}
}
删除一个名为“Jossef”的家伙:
感谢您的回复,我非常感谢。我(理想情况下)正在寻找一种解决方案,允许我删除一个项目,而不必将其从列表框中删除,然后再单独从实体中删除。我还在寻找一些关于“最佳方式”或“最正确”的一般指导你为什么认为这不是“最正确的”呢方法?向我展示从列表框中删除某些内容的代码行。你能解释一下上面代码中的
list1
、listbox1
和spe
所扮演的不同角色吗?如果你不明白,那么你必须自己做一些研究,然后才能得出结论,这不是“最正确的”这样做的方式。