2010-04-19 3 views
7

하나의 드롭 다운 상자에서 하드 코딩 된 항목을 키와 값을 유지하면서 다른 항목으로 복사하는 방법은 무엇입니까?하나의 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); 

답변

28

AddRange는 ListItem의 배열을 원합니다. 당신은 이것을 (C# 3+)처럼 할 수 있습니다.

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

항목에 해당 메서드가 없습니다. ( – LuRsT

+0

어떤 버전의 .NET을 사용하고 있습니까? 3.5 이상이면 System.Linq에 using 문을 추가하십시오. 2.0 인 경우 첫 번째 목록의 항목을 반복하고 두 번째 목록에 하나씩 추가하도록 선택할 수 있습니다. –

+0

덕분에 많은 친구가되었습니다. D – LuRsT

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

고마워요,하지만 내가 찾고있는 게 아니에요 – LuRsT

8

위의 앤서니의 의견에 동의합니다.

그러나 선택한 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(); 
2

내가 VB.NET이 알아낼 수 있으며이 답을 찾기 위해 잠시 나를했다. Duplicating DropDownListItems Without Looping

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

이 두 dropdownlists 사이에 깊은 사본을 할 것입니다.

아마도 관리자가이 대답을 제거하고 두 질문을 함께 연결할 수 있습니다.

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

나는이 방법을 한 방울에서 다른 배열로 직접 배열에 복사해야 할 필요성을 없애기 위해 직접 수행했습니다.

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

나는 내가

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

을 사용 VB에서이

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

더 많은 설명과 코드가 포함 된 제네릭 솔루션을 추가하십시오. 이 답변은 문제가 없지만 잘 작동하지만이 질문에 대답하려면 코드 또는 시나리오와 관련이없는 일반적인 변수 이름과 설명을 지정해야합니다. – Purushoth

0

대신 텍스트 원래의 진정한 값이 바인드 값처럼 사용 상품

이러한 요소 만 복제 할 수 있습니다.

관련 문제