Я пытаюсь скопировать подмножество RadComboBoxItems из одного RadComboBox в другой.В настоящее время я пытаюсь сделать это, используя перечислимый метод Where ().Хотя элементы копируются в список адресатов, элементы также удаляются из списка источников.
РЕДАКТИРОВАТЬ: Просто для пояснения, я знаю, что есть другие способы сделать это, но мне было интересно, как это сделать с помощью методов Enumerable LINQ.Кажется, что это должно быть возможно, и я видел примеры копирования элементов списка в другой список.
EDIT : Хорошо, этот код работает, как и ожидалось:
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 это не повлияло, но это тоже не сработало.
Если возможно, я бы хотел найти решение, похожее на то, что я делаю сейчас.Я был бы очень признателен за помощь в решении этой проблемы.