C# 如果重复选择,则下拉选择索引设置为0

C# 如果重复选择,则下拉选择索引设置为0,c#,asp.net,linq,C#,Asp.net,Linq,我有一个linq查询,它检查所有6个下拉列表是否有任何重复选择 为此,目前我将所有下拉列表的SelectedIndex设置为0。与此相反,我需要这两个下拉列表。SelectedIndex=0具有相同的SelectedValue var allIndexes = new List<int> { drpdwnlst_Seq1.SelectedIndex, drpdwnlst_Seq2.Sele

我有一个linq查询,它检查所有6个下拉列表是否有任何重复选择

为此,目前我将所有下拉列表的SelectedIndex设置为0。与此相反,我需要这两个下拉列表。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;
        }
var allIndexes=新列表
{
drpdwnlst_Seq1.选择索引,
drpdwnlst_Seq2.选择的索引,
drpdwnlst_seq 3.选择的索引,
drpdwnlst_seq 4.选择的索引,
drpdwnlst_seq 5.选择的索引,
drpdwnlst_seq 6.SelectedIndex
};
var noselectedIndexistheName=allIndexes.Where(x=>x!=0)
.GroupBy(x=>x)
.All(x=>x.Count()==1);
如果(!noselectedIndexistheName)
{
ScriptManager.RegisterStartupScript(Page,Page.GetType(),“AdminUserError”,“警报('选择重复');”,true);
drpdwnlst_Seq1.SelectedIndex=0;
drpdwnlst_Seq2.SelectedIndex=0;
drpdwnlst_Seq3.SelectedIndex=0;
drpdwnlst_Seq4.SelectedIndex=0;
drpdwnlst_Seq5.SelectedIndex=0;
drpdwnlst_seq 6.SelectedIndex=0;
}

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

List allIndexes=新列表
{
新的KeyValuePair(drpdwnlst_Seq1,drpdwnlst_Seq1.SelectedIndex),
新的KeyValuePair(drpdwnlst_Seq2,drpdwnlst_Seq2.SelectedIndex),
新的KeyValuePair(drpdwnlst_Seq3,drpdwnlst_Seq3.SelectedIndex),
新的KeyValuePair(drpdwnlst_Seq4,drpdwnlst_Seq4.SelectedIndex),
新的KeyValuePair(drpdwnlst_Seq5,drpdwnlst_Seq5.SelectedIndex),
新的KeyValuePair(drpdwnlst_seq 6,drpdwnlst_seq 6.SelectedIndex)
};
var groups=allIndexes.Where(x=>x.Value!=0).GroupBy(x=>x.Value);
布尔noselectedIndexistheName=groups.All(g=>g.Count()==1);
如果(!noselectedIndexistheName)
{
ScriptManager.RegisterStartupScript(Page,Page.GetType(),“AdminUserError”,“警报('选择重复');”,true);
foreach(组中的变量g)
{
如果(g.Count()==1)
{
继续;
}
foreach(var kvp,单位为g)
{
kvp.Key.SelectedIndex=0;
}
}
}

这样,您就有了组合框的引用+当前选定的索引,您可以按KeyValuePair.Value进行分组,如果没有相同的索引,您就有一个单独的bool检查。如果是,它将循环组,如果每个组发现超过1个,则重置这些

这是正确的逻辑。我申请了,但我得到了“ComboBox找不到”的错误。我用AjaxControlToolKit引用了它,然后我得到了这个KeyValuePair(AjaxControlToolKit.ComboBox,int)具有无效参数“是的,我不知道您正在使用哪个ui控件,您在asp.net控件中使用什么,请将该类用作KeyValuePair@devenravaliadone的基类。如何转换为int?@allIndexes.Where(x=>x!=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;
        }
    }
}