代码之家  ›  专栏  ›  技术社区  ›  LuRsT

如何将项目从一个下拉列表复制到另一个下拉列表

  •  7
  • LuRsT  · 技术社区  · 15 年前

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

    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 回复  |  直到 8 年前
        1
  •  28
  •   Anthony Pegram    15 年前

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

    drpTypesCreateEdit.Items.AddRange(drpTypes.Items.OfType<ListItem>().ToArray()); 
    
        2
  •  9
  •   Jordan Parker    10 年前

    同意安东尼的上述评论。

    但是,由于所选列表项仍引用原始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”,而这显然不是上述代码的意图。

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

    drpTypesCreateEdit.Items.AddRange(drpTypes.Items.Cast<ListItem>().Select(x => New ListItem(x.Text, x.SelectedValue)).ToArray();
    
        3
  •  3
  •   Ryan Alford    15 年前

    这将是更简单的方法之一。

    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
  •  3
  •   Community Mohan Dere    8 年前

    我在vb.net中找不到这个答案,我花了一段时间才找到这个答案。 Duplicating DropDownListItems Without Looping

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

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

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

        5
  •  0
  •   Armaan    11 年前
    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);
                }
    

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

        6
  •  0
  •   Jon649    10 年前

    我这样做直接从一个下拉列表到另一个,减少了先复制到数组的需要。

      foreach(ListItem listItem in myDropDownList.Items)
        {
           myOtherDropDownList.Items.Add(listItem)
        }
    
        7
  •  0
  •   Neil    8 年前

    我用过这个

    comboBox2.Items.AddRange(comboBox3.Items.OfType<string>().ToArray());
    
        8
  •  0
  •   elle0087    8 年前

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

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

    这是我找到克隆元素的唯一方法