如果选择重复,则 DropDown SelectedIndex 设置为 0

DropDown SelectedIndex set to 0 if Selection Repeated

我有这个 linq 查询,它检查所有 6 个下拉菜单是否有重复的选择。

为此,目前我将所有下拉菜单的 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;
        }

您可以将列表更改为以下定义,(这样您可以保留大部分逻辑)

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 分组,并且如果没有相同的索引,您将进行单独的 bool 检查。如果是,它将循环分组,如果每组找到超过 1 个,则重置这些