【问题标题】:How to remove item from listbox and have changes reflected in entity如何从列表框中删除项目并将更改反映在实体中
【发布时间】:2015-11-14 06:40:32
【问题描述】:

我正在尝试将实体绑定到列表框,当我从实体中删除某些内容时,我希望它反映在列表框中。

这是一个代码sn-p:

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

我有一个按钮,当我单击它时,我希望它删除列表框中的选定项目,但更重要的是,我希望它从基础实体中删除该项目。即:当从列表框中选择并删除 xyz 时,我希望从 spe 中删除 xyz。

如果我执行bs.Remove(item) 将项目从列表框中删除(然后我调用bs.ResetBindings(),但它不会更新实体(spe.SomeEntity)。最初,我认为它会,但后来我意识到 LINQ 是一个查询,返回一些结果。

当我单击删除按钮时,我可以执行spe.SomeEntity.Remove(item),但列表框不会更新。

有没有一种方法可以只对其中一个执行删除,并且都更新了?

我这样做完全错了吗?是否有某种“标准”方式来做这种事情?

我无法将spe.SomeEntity.ToList() 直接绑定到列表框,因为我需要实体中记录的子集。

感谢任何帮助,我仍在学习。

【问题讨论】:

    标签: c# data-binding listbox entity-framework-6


    【解决方案1】:

    你可以这样做:

        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();
            }
        }
    

    删除一个名叫“Jossef”的人:

    【讨论】:

    • 感谢您的回复,非常感谢。我(理想情况下)正在寻找一种解决方案,该解决方案允许我删除一个项目,而不必真正从列表框中删除它,然后分别从实体中删除它。我也在寻找一些关于实现这一点的“最佳方式”或“最正确”方式的一般指导。
    • 为什么你认为这不是“最正确”的做法?
    • 显示正在从列表框中删除某些内容的代码行。
    • 你能解释一下list1listbox1spe在上面的代码中扮演的不同角色吗?
    • 如果你不明白这一点,那么你必须自己做一些研究,然后才能断定这不是“最正确”的做法。
    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2020-12-07
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多