C# 将项目子集从一个RadComboBox复制到另一个RadComboBox
我正在尝试将RadComboBox项的子集从一个RadComboBox复制到另一个RadComboBox。目前,我正在尝试使用枚举Where方法来实现这一点。虽然项目被复制到目标列表,但项目也将从源列表中删除 编辑: 为了澄清,我知道还有其他方法可以实现这一点,但我想知道如何使用可枚举LINQ方法实现这一点。这似乎应该是可能的,我也看到过将列表项复制到另一个列表的例子 编辑:好的,这段代码按预期工作:C# 将项目子集从一个RadComboBox复制到另一个RadComboBox,c#,asp.net,linq,telerik,webforms,C#,Asp.net,Linq,Telerik,Webforms,我正在尝试将RadComboBox项的子集从一个RadComboBox复制到另一个RadComboBox。目前,我正在尝试使用枚举Where方法来实现这一点。虽然项目被复制到目标列表,但项目也将从源列表中删除 编辑: 为了澄清,我知道还有其他方法可以实现这一点,但我想知道如何使用可枚举LINQ方法实现这一点。这似乎应该是可能的,我也看到过将列表项复制到另一个列表的例子 编辑:好的,这段代码按预期工作: List<RadComboBoxItem> itemList = new List
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;
我做错了什么
以下是源列表:
<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>
这非常有效,只是当我将这些项添加到ddlEndDayOfWeek时,它们会从ddlStartDayOfWeek中删除。我做错了什么?我该如何修复它?Where方法就是这样工作的吗?我尝试将Where方法的结果放入一个列表,希望如果我没有直接在Items集合之外工作,ddlStartDayOfWeek不会受到影响,但这也不起作用
如果可能的话,我想找到一个类似于我现在所做的解决方案。我非常感谢您能帮我解决这个问题。我还没有尝试过,但这似乎是因为您正在将页面上已经存在的RadComboBox项目对象添加到另一个RadComboBox中。您应该将所选RadComboBoxItem集合的值和文本复制到新的RadComboxItems中,而不是将对象本身从一个RadComboxItems移动到另一个RadComboxItems中。我希望使用可枚举的LINQ方法来实现这一点,但最后我决定采用经过验证的老方法:
/// <summary>
/// Prepares the range specifier.
/// </summary>
private void PrepareRangeSpecifier()
{
//clear the items from the end range list
ddlEndDayOfWeek.Items.Clear();
if (pnlEndDayOfWeek.Visible)
{
foreach (RadComboBoxItem item in ddlStartDayOfWeek.Items)
{
//insert the list items from the start range list
if (item.Index > ddlStartDayOfWeek.SelectedIndex)
ddlEndDayOfWeek.Items.Add(new RadComboBoxItem(item.Text, item.Value));
}
//set end range panel visibility
pnlEndDayOfWeek.Visible = ddlEndDayOfWeek.Items.Count > 0;
}
//if the end range has any items
if (ddlEndDayOfWeek.Items.Count > 0)
ddlEndDayOfWeek.Items.FirstOrDefault().Selected = true;
}
我非常感谢其他人的贡献,仍然欢迎新的答案 我一直在胡思乱想这个想法,但我不知道如何在LINQ做到这一点。有什么想法吗?你试过像dlEndDayOfWeek.Items.AddRangeDddlStartDayOfWeek.Items.WherelistItem=>listItem.Index>DldStartDayOfWeek.SelectedIndex.Select x=>new{x.Value,x.Text};?我在这里没有Telerik控件,因此无法进行测试,但您明白了-只需创建新的ListItems。问题是-ddlStartDayOfWeek.Items.WherelistItem=>listItem.Index>ddlStartDayOfWeek.SelectedIndex-从ddlStartDayOfWeek中删除筛选的项。我要试一试,只想说是我干的。我知道我可以使用foreach向ddlEndDayOfWeek添加新的列表项,但我想知道如何使用LINQ。
<telerik:RadComboBox ID="ddlEndDayOfWeek" runat="server" Skin="Sunset" Font-Size="12px" Font-Names="Verdana" Width="150" OnSelectedIndexChanged="ddlEndDayOfWeek_SelectedIndexChanged"></telerik:RadComboBox>
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;
}
}
/// <summary>
/// Prepares the range specifier.
/// </summary>
private void PrepareRangeSpecifier()
{
//clear the items from the end range list
ddlEndDayOfWeek.Items.Clear();
if (pnlEndDayOfWeek.Visible)
{
foreach (RadComboBoxItem item in ddlStartDayOfWeek.Items)
{
//insert the list items from the start range list
if (item.Index > ddlStartDayOfWeek.SelectedIndex)
ddlEndDayOfWeek.Items.Add(new RadComboBoxItem(item.Text, item.Value));
}
//set end range panel visibility
pnlEndDayOfWeek.Visible = ddlEndDayOfWeek.Items.Count > 0;
}
//if the end range has any items
if (ddlEndDayOfWeek.Items.Count > 0)
ddlEndDayOfWeek.Items.FirstOrDefault().Selected = true;
}