将多个选定的列表框项保存到数据库

时间:2018-10-30 21:08:04

标签: c# entity-framework

我有一个列表框,我想将所有选定的项目保存在数据库的不同行中,请尝试如何操作

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

但仅保存最后选择的项目

2 个答案:

答案 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();