2010-04-19 104 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() 

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

这些是我发现克隆元素的唯一方法

相关问题