我试图复制 RadComboBoxItems从一个RadComboBox的子集到另一个。目前,我正在尝试使用可枚举的Where()方法执行此操作。尽管项目正被复制到目标列表中,但项目也将从源列表中删除。从一个RadComboBox复制项目的子集到另一个
编辑: 只是为了澄清,我知道有其他的方法来做到这一点,但我想知道如何与可枚举LINQ方法做到这一点。它似乎应该是可能的,我已经看到了将列表项目复制到另一个列表的例子。
编辑:好了,所以这段代码按预期工作:
List<RadComboBoxItem> itemList = new List<RadComboBoxItem>(new RadComboBoxItem[] { new RadComboBoxItem("Mon", "0"), new RadComboBoxItem("Tue", "1"), new RadComboBoxItem("Wed", "2") });
//result = 1 (original list queried using where method
int filteredCount = itemList.Where(item => Int32.Parse(item.Value) > 1).Count();
//result = 3 (original list preserved)
int itemListCount = itemList.Count;
但这代码不起作用。它会将项目添加到ddlEndDayOfWeek,但它也将删除ddlStartDayOfWeek经过滤项:
ddlEndDayOfWeek.Items.AddRange(ddlStartDayOfWeek.Items.ToList().Where(item => item.Index > ddlStartDayOfWeek.SelectedIndex));
我在做什么错在这里?
这里是源列表:
<telerik:RadComboBox ID="ddlStartDayOfWeek" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlStartDayOfWeek_SelectedIndexChanged">
<Items>
<telerik:RadComboBoxItem Text="Sunday" Value="0" />
<telerik:RadComboBoxItem Text="Monday" Value="1" />
<telerik:RadComboBoxItem Text="Tuesday" Value="2" />
<telerik:RadComboBoxItem Text="Wednesday" Value="3" />
<telerik:RadComboBoxItem Text="Thursday" Value="4" />
<telerik:RadComboBoxItem Text="Friday" Value="5" />
<telerik:RadComboBoxItem Text="Saturday" Value="6" />
</Items>
</telerik:RadComboBox>
这里是目的地列表:
<telerik:RadComboBox ID="ddlEndDayOfWeek" runat="server" Skin="Sunset" Font-Size="12px" Font-Names="Verdana" Width="150" OnSelectedIndexChanged="ddlEndDayOfWeek_SelectedIndexChanged"></telerik:RadComboBox>
,除非用户点击“添加范围”按钮,ddlEndDayOfWeek将不会显示在该点ddlEndDayOfWeek将显示并填充从ddlStartDayOfWeek中选定日期后的列表中的日子。如果用户从ddlStartDayOfWeek中选择不同的日期,则会再次过滤ddlEndDayOfWeek。例如,如果从ddlStartDayOfWeek中选择星期四,则只有星期五和星期六将显示在ddlEndDayOfWeek中。基本上,用户必须选择一个天数范围,并且结束范围不能小于开始范围。
我想按照我打算的方式工作。下面是我使用的填充ddlEndDayOfWeek代码:
protected void PrepareRangeSpecifier()
{
//clear the selection and items from the end range list
if (ddlEndDayOfWeek.Items.Count > 0)
{
ddlEndDayOfWeek.ClearSelection();
ddlEndDayOfWeek.Items.Clear();
}
//if the user has chosen to enter a range
if(plcEndRange.Visible)
{
//populate the end range with days falling after the start range
ddlEndDayOfWeek.Items.AddRange(ddlStartDayOfWeek.Items.Where(listItem => listItem.Index > ddlStartDayOfWeek.SelectedIndex));
//if the end range contains items select the first one
if (ddlEndDayOfWeek.Items.Count > 0)
ddlEndDayOfWeek.Items.FirstOrDefault().Selected = true;
}
}
这个伟大的工程,除了一个事实,当我将商品加入ddlEndDayOfWeek,他们从ddlStartDayOfWeek删除。我做错了什么,我该如何解决? Where()方法应该如何工作?我已经尝试将Where()方法的结果放入List中,希望如果我没有直接从Items集合中工作,那么ddlStartDayOfWeek将不会受到影响,但这也不起作用。
如果可能,我想找到一个类似于我现在所做的解决方案。我真的很感谢帮助解决这个问题。
任何人有任何想法? –