Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项目子集从一个RadComboBox复制到另一个RadComboBox_C#_Asp.net_Linq_Telerik_Webforms - Fatal编程技术网

C# 将项目子集从一个RadComboBox复制到另一个RadComboBox

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

我正在尝试将RadComboBox项的子集从一个RadComboBox复制到另一个RadComboBox。目前,我正在尝试使用枚举Where方法来实现这一点。虽然项目被复制到目标列表,但项目也将从源列表中删除

编辑: 为了澄清,我知道还有其他方法可以实现这一点,但我想知道如何使用可枚举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; 
我做错了什么

以下是源列表:

<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;
}