我試圖複製 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將不會受到影響,但這也不起作用。
如果可能,我想找到一個類似於我現在所做的解決方案。我真的很感謝幫助解決這個問題。
任何人有任何想法? –