如何将一个列表框中的多个选定值添加到第二个asp.net列表框中

时间:2012-12-11 21:47:00

标签: c# asp.net

我有两个列表框,我试图将多个值从一个传递到另一个。 asp.net代码

<asp:UpdatePanel ID="userButtonPanel" runat="server" UpdateMode="Conditional">
                                <ContentTemplate>
                                    <asp:LinkButton Text=">>" ID="lbtn_add" CssClass="button advButtons addRemButton"
                                        runat="server" OnClick="addMappedUser_Click" />
                                    <asp:LinkButton Text="<<" ID="lbtn_remove" CssClass="button advButtons addRemButton"
                                        runat="server" OnClick="removeMappedUser_Click" />
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </div>
                        <div>
                            <asp:Label ID="lbl_MappedUSers" Text="Mapped Users" runat="server" />
                            <asp:ListBox ID="listMappedUsers" runat="server" SelectionMode="Multiple" CssClass="listboxMappedUsers"  />
                        </div>
                    </div>
                </div>
                <input id="cbUserList" type="hidden" runat="server" value="" />
                <input id="cbUserRoleID" type="hidden" runat="server" value="" />
            </ContentTemplate>
        </asp:UpdatePanel>

addMappedUser_Click的点击事件中,我评估listAllUsers列表框以查看所选项目并创建这些项目的列表

protected void addMappedUser_Click(object sender, EventArgs e)
        {
            List<ListItem> selectedItems = listAllUsers.Items.Cast<ListItem>().Where(i => i.Selected).ToList();
            List<AddedUsers> newusers = new List<AddedUsers>();
            foreach (var item in selectedItems)
            {
                AddedUsers au = new AddedUsers();
                au.UserID = item.Value;
                au.UserName = item.Text;
                newusers.Add(au);
            }

            MoveSelectedItems(newusers, listAllUsers);
        }

创建该列表后,将其传递给MoveSelectedItems Method

protected void MoveSelectedItems(List<AddedUsers> from, ListBox to)
        {

            if (from.Count == 0)
            {
                return;
            }

            SecurityUserRole sur = new SecurityUserRole();

            ListItem item = new ListItem();
            foreach (var i in from)
            {
                item.Value = i.UserID;
                item.Text = i.UserName;             
                if (listAllUsers.Items.Contains(item))
                {
                    listAllUsers.Items.Remove(item);
                    listMappedUsers.Items.Add(item);
                }  

                sur.SecurityUserId = Convert.ToInt32(i.UserID);
                sur.SecurityRoleId = Convert.ToInt32(RoleID);
                MappedUser.Add(sur);
                Session["MappedUser"] = MappedUser;
                checkMappingButtons(listMappedUsers, listAllUsers);
                editUserUpdatePanel.Update();
            }
        }

我遇到的困难在于将用户添加到第二个列表框(listMappedUsers.Items.Add) 当我设置断点时,我可以看到每个值都通过(例如“201”,“202”,“203”)但是当updatepanel更新时,列表框将只列出203次。

有人可以帮助我理解我所缺少的内容以及为什么最后一个值是列表框中出现的唯一值与之前的前辈相比?

提前致谢,

1 个答案:

答案 0 :(得分:1)

在您的上一部分代码中,您需要在ListItem中实例化一个新的foreach。就像现在一样,您在item中一遍又一遍地编辑foreach

protected void MoveSelectedItems(List<AddedUsers> from, ListBox to)
    {

        if (from.Count == 0)
        {
            return;
        }

        SecurityUserRole sur = new SecurityUserRole();

        ListItem item;
        foreach (var i in from)
        {
            item = new ListItem();
            item.Value = i.UserID;
            item.Text = i.UserName;             
            if (listAllUsers.Items.Contains(item))
            {
                listAllUsers.Items.Remove(item);
                listMappedUsers.Items.Add(item);
            }  

            sur.SecurityUserId = Convert.ToInt32(i.UserID);
            sur.SecurityRoleId = Convert.ToInt32(RoleID);
            MappedUser.Add(sur);
            Session["MappedUser"] = MappedUser;
            checkMappingButtons(listMappedUsers, listAllUsers);
            editUserUpdatePanel.Update();
        }
    }