如何将项目从一个DropDownList复制到另一个

时间:2010-04-19 13:46:09

标签: c# asp.net drop-down-menu

如何将从一个下拉框中硬编码的项目复制到保留键和值的另一个项目?

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 个答案:

答案 0 :(得分:28)

AddRange想要一个ListItem数组。你可以这样做(C#3 +)。

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

答案 1 :(得分:9)

同意安东尼的评论。

但是,由于选定的ListItem仍将引用原始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();

答案 2 :(得分:4)

我无法在VB.NET中弄清楚这一点,我花了一些时间才找到这个答案。 Duplicating DropDownListItems Without Looping

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

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

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

答案 3 :(得分: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);
}

你需要更精细的东西吗?

答案 4 :(得分: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 - :现在从Array复制到DropDownList2。

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

这对我有用!!!!!!!!!!!!!

答案 5 :(得分:0)

我是这样做的,直接从一个下拉到另一个下拉,需要先复制到数组。

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

答案 6 :(得分:0)

我喜欢这个

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

答案 7 :(得分: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()

但是这会将Text与Text绑定,而不是原始Items的真值

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