如何从列表框中删除项目并将更改反映在实体中
How to remove item from listbox and have changes reflected in entity
我正在尝试将实体绑定到列表框,当我从实体中删除某些内容时,我希望它反映在列表框中。
这是一个代码片段:
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)
,但列表框不会更新。
有没有一种方法可以只对其中一个执行删除,并更新两个?
我这样做完全错了吗?有某种 'standard' 方法可以做这种事吗?
我无法将 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();
}
}
删除名为 "Jossef" 的人:
我正在尝试将实体绑定到列表框,当我从实体中删除某些内容时,我希望它反映在列表框中。
这是一个代码片段:
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)
,但列表框不会更新。
有没有一种方法可以只对其中一个执行删除,并更新两个?
我这样做完全错了吗?有某种 'standard' 方法可以做这种事吗?
我无法将 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();
}
}
删除名为 "Jossef" 的人: