我有一个列表框,我想将所有选定的项目保存在数据库的不同行中,请尝试如何操作
foreach (ListItem item in comboGroup.Items)
{
if (item.Selected)
{
grp.username = comboUserName3.SelectedValue.ToString();
string selectedItem = item.Value.ToString();
int val = int.Parse(selectedItem);
grp.groupid = val;
//grp.iscurrent = true;
grp.dateadded = DateTime.Now;
}
}
db.group_user.Add(grp);
db.SaveChanges();
但仅保存最后选择的项目
答案 0 :(得分:1)
db.group_user.Add(grp)行;似乎在for循环之外。每次循环时,您将覆盖这些值。因此,最后,当它退出循环时,只剩下最后一个值。
修改代码为
foreach (ListItem item in comboGroup.Items)
{
if (item.Selected)
{
grp.username = comboUserName3.SelectedValue.ToString();
string selectedItem = item.Value.ToString();
int val = int.Parse(selectedItem);
grp.groupid = val;
//grp.iscurrent = true;
grp.dateadded = DateTime.Now;
db.group_user.Add(grp);
db.SaveChanges();
}
}
答案 1 :(得分:0)
这是因为直到离开循环后才进行“添加”。因此它只运行一次,并使用grp
的值,因为它是最后一次执行循环。您需要为每个项目做一个“添加”(因为每个“添加”都会创建一行),因此本质上,“添加”必须位于循环内,并且还应该将grp
声明为每个对象时间。 (如果您想知道,SaveChanges可以保留在循环之外)。
foreach (ListItem item in comboGroup.Items)
{
if (item.Selected)
{
var grp = new group_user();
grp.username = comboUserName3.SelectedValue.ToString();
string selectedItem = item.Value.ToString();
int val = int.Parse(selectedItem);
grp.groupid = val;
//grp.iscurrent = true;
grp.dateadded = DateTime.Now;
db.group_user.Add(grp);
}
}
db.SaveChanges();