2010-04-19 25 views
7

¿Cómo puedo copiar elementos codificados de un cuadro desplegable a otro manteniendo las claves y los valores?Cómo copiar elementos de una DropDownList a otra

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

Respuesta

28

AddRange quiere una serie de ListItems. puedes hacerlo así (C# 3+).

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

no tengo ese método en los puntos :( – LuRsT

+0

¿Qué versión de .NET está usando? Si es 3.5+, agregue una instrucción using para System.Linq. Si es 2.0, simplemente puede optar por repetir los elementos en la primera lista y agregarlos uno por uno a la segunda. –

+0

Funcionó, muchas gracias compañero: D – LuRsT

3

Esta sería una de las formas más fáciles ..

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

¿Necesita algo más elaborado?

+0

Gracias, pero no es lo que estaba buscando – LuRsT

8

De acuerdo con el comentario anterior de Anthony.

Sin embargo, dado que los ListItems seleccionados seguirán refiriéndose a los mismos objetos de la DropDownList original, habrá efectos secundarios involuntarios al cambiar campos/propiedades.

Por ejemplo:

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"; 

Ambos drpTypes y drpTypesCreateEdit tienen ahora SelectedValue de "3", mientras que no es claramente la intención del código de seguridad.

Instanciando nuevo ListItem objetos en lugar de simplemente seleccionando el objeto original va a arreglar esto:

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

no podía resolver esto en VB.NET y me tomó un tiempo para encontrar esta respuesta. Duplicating DropDownListItems Without Looping

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

Esto va a hacer una copia profunda entre dos dropdownlists.

Quizás un administrador puede quitar esta respuesta y relacionar las dos preguntas.

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

Ejemplo: se copia todos los artículos en DropDownList1 a DropDownList2.

Artículos en 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- la primera copia a DropDownList1 matriz.

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

2-: Ahora Copiar de Array para DropDownList2.

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

Esto funciona para mí !!!!!!!!!!!!!

0

Lo hice de esta manera directamente de una lista desplegable a otra, cortando primero la necesidad de copiar a una matriz.

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

que utiliza como esto

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

Agregue una solución genérica con más explicación y código. Esta respuesta está bien y funciona para usted, pero para responder esta pregunta, debe darle un nombre general de variables y explicaciones que no sean específicas de su código o escenario. – Purushoth

0

en vb i utilizado

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

o

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

pero este valor se unen con el texto en lugar del verdadero valor de originales Artículos

estos son la única forma que encontré para clonar elementos

Cuestiones relacionadas