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
所扮演的不同角色吗?如果你不明白,那么你必须自己做一些研究,然后才能得出结论,这不是“最正确的”这样做的方式。