2010-04-19 13 views
7

Jak mogę skopiować elementy na stałe z jednego rozwijanego okna do drugiego zachowując klucze i wartości?Jak kopiować elementy z jednego DropDownList do innego

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

Odpowiedz

28

AddRange chce tablicy ListItems. możesz to zrobić w ten sposób (C# 3+).

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

Nie mam tej metody w pozycji :( – LuRsT

+0

Jakiej wersji .NET używasz? Jeśli 3.5+, dodaj instrukcję using dla System.Linq. Jeśli jesteś 2.0, możesz po prostu wybrać iterację pozycji na pierwszej liście i dodać je jeden po drugim do drugiego. –

+0

To zadziałało, bardzo dziękuję za kolega: D – LuRsT

3

Byłby to jeden z łatwiejszych sposobów ..

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

Czy trzeba coś bardziej skomplikowanego?

+0

Dzięki, ale nie to, czego szukałem. – LuRsT

8

Zgadzam się z powyższym komentarzem Anthony'ego.

Jednak, ponieważ wybrane elementy ListItems będą nadal odnosić się do tych samych obiektów z oryginalnej listy rozwijanej DropDownList, będą występowały niezamierzone efekty uboczne przy zmianie pól/właściwości.

Na przykład:

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

Oba drpTypes i drpTypesCreateEdit teraz SelectedValue „3”, natomiast wyraźnie, że nie jest intencją powyższego kodu.

instancji nowy ListItem obiektów zamiast po prostu wybierając oryginalnego obiektu będzie rozwiązać ten problem:

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

Nie mogłem dowiedzieć się tego w VB.NET i zajęło mi trochę czasu, aby znaleźć tę odpowiedź. Duplicating DropDownListItems Without Looping

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

to zrobi głęboką kopię pomiędzy dwoma dropdownlists.

Być może administrator może usunąć tę odpowiedź i połączyć dwa pytania razem.

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

Przykład: skopiuje wszystkie przedmioty z DropDownList1 do DropDownList2.

przedmioty W 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- pierwszej kopii DropDownList1 do tablicy.

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

2-: Teraz Kopiuj z tablicy do DropDownList2.

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

To działa dla mnie !!!!!!!!!!!!!

0

Zrobiłem to w ten sposób bezpośrednio z jednej listy do drugiej, co zmniejszyło potrzebę wcześniejszego skopiowania do tablicy.

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

Kiedyś jak ten

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

Dodaj ogólne rozwiązanie z dodatkowymi objaśnieniami i kodem. Ta odpowiedź jest w porządku i działa dla ciebie, ale aby odpowiedzieć na to pytanie, musisz nazwać ogólne nazwy zmiennych i objaśnienia, które nie są specyficzne dla twojego kodu lub scenariusza. – Purushoth

0

w VB i używane

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

lub

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

ale tym wiążą wartość z tekstem zamiast prawdziwej wartości oryginału Przedmioty

to jedyny sposób, w jaki znalazłem elementy do klonowania

Powiązane problemy