2015-01-07 29 views
-1

我有這個linq查詢,它檢查所有6個下拉列表是否有任何重複選擇。如果重複選擇,DropDown SelectedIndex設置爲0

要做到這一點,目前我爲所有下拉列表將SelectedIndex設置爲0。取而代之的是,我希望那兩個dropdowns.SelectedIndex = 0具有相同的SelectedValue。

 var allIndexes = new List<int> 
     { 
       drpdwnlst_Seq1.SelectedIndex, 
       drpdwnlst_Seq2.SelectedIndex, 
       drpdwnlst_Seq3.SelectedIndex, 
       drpdwnlst_Seq4.SelectedIndex, 
       drpdwnlst_Seq5.SelectedIndex, 
       drpdwnlst_Seq6.SelectedIndex 
     }; 

     var noSelectedIndexIsTheSame = allIndexes.Where(x => x != 0) 
            .GroupBy(x => x) 
            .All(x => x.Count() == 1); 

     if (!noSelectedIndexIsTheSame) 
     { 
      ScriptManager.RegisterStartupScript(Page, Page.GetType(), "AdminUserError", "alert('Selection Rrepeated.'); ", true); 

      drpdwnlst_Seq1.SelectedIndex = 0; 
      drpdwnlst_Seq2.SelectedIndex = 0; 
      drpdwnlst_Seq3.SelectedIndex = 0; 
      drpdwnlst_Seq4.SelectedIndex = 0; 
      drpdwnlst_Seq5.SelectedIndex = 0; 
      drpdwnlst_Seq6.SelectedIndex = 0; 
     } 

回答

1

您可以在列表中更改到下面的定義,(這樣你就可以讓大部分的邏輯)

List<KeyValuePair<DropDownList, int>> allIndexes = new List<KeyValuePair<DropDownList, int>> 
{ 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq1, drpdwnlst_Seq1.SelectedIndex), 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq2, drpdwnlst_Seq2.SelectedIndex), 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq3, drpdwnlst_Seq3.SelectedIndex), 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq4, drpdwnlst_Seq4.SelectedIndex), 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq5, drpdwnlst_Seq5.SelectedIndex), 
    new KeyValuePair<DropDownList, int>(drpdwnlst_Seq6, drpdwnlst_Seq6.SelectedIndex) 
}; 

var groups = allIndexes.Where(x => x.Value != 0).GroupBy(x => x.Value); 
boolean noSelectedIndexIsTheSame = groups.All(g => g.Count() == 1); 

if (!noSelectedIndexIsTheSame) 
{ 
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "AdminUserError", "alert('Selection Rrepeated.'); ", true); 

    foreach (var g in groups) 
    { 
     if (g.Count() == 1) 
     { 
      continue; 
     } 
     foreach (var kvp in g) 
     { 
      kvp.Key.SelectedIndex = 0; 
     } 
    } 
} 

這種方式,你有你的組合框+當前所選指標的參考,你由KeyValuePair.Value分組,並且如果沒有索引是相同的,你有一個單獨的布爾檢查。如果是,則會循環組,並且如果每組發現1個以上,則重置這些

+0

這是正確的邏輯。我申請了,但我得到'ComboBox無法找到'的錯誤。我用AjaxControlToolKit引用它,然後我得到這個。 'KeyValuePair(AjaxControlToolKit.ComboBox,int)有無效的參數' –

+0

是啊,我不知道你正在使用哪個UI控件,你在asp.net控件中使用了什麼,使用那個類作爲你的KeyValuePair的基類@DevenRavaliya – Icepickle

+0

完成。如何將轉換爲int? @ allIndexes.Where(x => x!= 0) –

相關問題