如何将一个下拉列表中的项目复制到另一个下拉列表?

10

我该如何将一个下拉框中硬编码的选项复制到另一个下拉框中,同时保留键和值?

drpTypes.Items.Add(new ListItem("Tipos de Acções", "1"));
drpTypes.Items.Add(new ListItem("Tipos de Combustível", "2"));
drpTypes.Items.Add(new ListItem("Tipos de Condutor", "3"));

drpTypesCreateEdit.Items.AddRange(drpTypes.Items);
8个回答

30

AddRange需要一个列表项数组。你可以像这样做(C# 3+)。

drpTypesCreateEdit.Items.AddRange(drpTypes.Items.OfType<ListItem>().ToArray()); 

我在Items中没有那个方法 :( - LuRsT
1
你使用的是哪个版本的.NET?如果是3.5+,则需要为System.Linq添加一个using语句。如果是2.0,则可以选择遍历第一个列表中的项目,并将它们逐个添加到第二个列表中。 - Anthony Pegram
3
这样做会不会导致同一个 ListIem 对象被多个 DropDownList 共享?这可能会在某些情况下导致冲突。 - Serge
是的,这会发生。我已经在我的帖子下面添加了这个。 - Jordan Parker

12

同意Anthony在上面的评论。

然而,由于所选的ListItems仍将引用原始DropDownList的相同对象,因此在更改字段/属性时会产生意想不到的副作用。

例如:

drpTypes.Items.Add(new ListItem("Tipos de Acções", "1"));
drpTypes.Items.Add(new ListItem("Tipos de Combustível", "2"));
drpTypes.Items.Add(new ListItem("Tipos de Condutor", "3"));

drpTypesCreateEdit.Items.AddRange(drpTypes.Items);

drpTypes.SelectedValue = "2";
drpTypesCreateEdit.SelectedValue = "3";

drpTypes和drpTypesCreateEdit现在都有"3"的SelectedValue,而这显然不是上面代码的意图。

实例化新的ListItem对象而不仅仅是选择原始对象将解决此问题:

drpTypesCreateEdit.Items.AddRange(drpTypes.Items.Cast<ListItem>().Select(x => New ListItem(x.Text, x.SelectedValue)).ToArray();

4

我在VB.NET中无法弄清楚这个问题,花了一些时间才找到答案。 不使用循环复制DropDownListItems

DropDownList2.DataSource = DropDownList1.Items
DropDownList2.DataTextField = "Text"
DropDownList2.DataValueField = "Value"
DropDownList2.DataBind()

这将在两个下拉列表之间进行深度复制。

也许管理员可以删除此答案并将两个问题链接在一起。


3
这将是更简单的方法之一...
drpTypes.Items.Add(new ListItem("Tipos de Acções", "1"));
drpTypes.Items.Add(new ListItem("Tipos de Combustível", "2"));
drpTypes.Items.Add(new ListItem("Tipos de Condutor", "3"));

foreach(ListItem li in drpTypes.Items)
{
    drpTypesCreateEdit.Items.Add(li);
}

您需要更详细的内容吗?


0

我直接从一个下拉菜单到另一个下拉菜单进行操作,省去了先复制到数组的步骤。

  foreach(ListItem listItem in myDropDownList.Items)
    {
       myOtherDropDownList.Items.Add(listItem)
    }

0
This is also good for copying DropDownList items to another.

示例: 将从DropDownList1复制所有项目到DropDownList2。

DropDownList1中的项目:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Text="A" Value="1"></asp:ListItem>
    <asp:ListItem Text="B" Value="2"></asp:ListItem>
    <asp:ListItem Text="C" Value="3"></asp:ListItem>
    <asp:ListItem Text="D" Value="4"></asp:ListItem>
    <asp:ListItem Text="E" Value="5"></asp:ListItem>
</asp:DropDownList>

1- 首先将DropDownList1复制到数组中。

ListItem[] ListitemsArray = new ListItem[DropDownList1.Items.Count];
DropDownList1.Items.CopyTo(ListitemsArray, 0);

2-:现在将数组中的内容复制到DropDownList2中。

            foreach (ListItem liItems in ListitemsArray)
            {
                DropDownList2.Items.Add(liItems);
            }

这对我来说可行!!!!!!!!


0

在 VB 中我使用了

Dim cb As CheckBoxList=new CheckBoxList()
cb.Items.AddRange(CheckBoxList_Source.Items.Cast(Of ListItem)().Select(Function(f) New ListItem(f.Text, f.Value)).ToArray())

或者

Dim cb As CheckBoxList=new CheckBoxList()
cb.DataSource = CheckBoxList_Source.Items
cb.DataBind()

但这将值与文本绑定,而不是原始项的真实值

这些是我发现的克隆元素的唯一方法


0

我用的是这样

comboBox2.Items.AddRange(comboBox3.Items.OfType<string>().ToArray());

添加一个通用的解决方案,包括更多的解释和代码。这个答案对你来说是可以的并且有效,但是为了回答这个问题,你必须命名一些通用的变量名称和解释,而不是针对你的代码或情境。 - Purushoth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接