2010-04-19 165 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想要一個ListItems數組。你可以像這樣做(C#3+)。

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

我沒有在項目中的該方法:( – LuRsT 2010-04-19 13:56:32

+0

您正在使用什麼版本的.NET?如果3.5+,請爲System.Linq添加using語句。如果2.0,你可以簡單地選擇遍歷第一個列表中的項目,並將它們逐個添加到第二個列表中。 – 2010-04-19 13:59:14

+0

它的工作,非常感謝:D – LuRsT 2010-04-19 14:03:42

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 2010-04-19 14:04:41

8

同意上面的Anthony的評論。

但是,由於所選的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

我用這樣的

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

添加一個通用的解決方案,更多的解釋和代碼。這個答案很好,適用於你,但爲了回答這個問題,你必須將它命名爲一般變量名稱和解釋,這些名稱和解釋並不特定於你的代碼或場景。 – Purushoth 2017-03-17 06:42:27

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

但與文本,而不是原來的真值這個綁定值項目

這些是我發現克隆元素的唯一方法

相關問題