使用C#中的DropDownList对优先级进行排名

时间:2011-01-26 01:50:23

标签: c# .net asp.net

我的想法是使用DropDownList ASP服务器控件构建排名优先级。

这是我的设置:我有3个DropDownLists,每个DropDownLists上有3个项目(“First”,“Second”,“Third”)。当我选择第一个DropDownList时,假设我选择的项是“First”,默认情况下在第二个DropDownList上,其SelectedItem是“First”,我选择的第一个DropDownList的项必须在第二个DropDownList上交换。

简而言之,每个DropDownList上都会有唯一的SelectedItems,并且在每个SelectedIndexChanged事件中都会发生3个DropDownLists上的项目交换。这就是我的排名优先级。

我的问题是,如何在DropDownList上交换DropDownList上的前一项,我选择了另一个DropDownList并放置了一个新项目?

这是我的代码:

protected void DropDownListPriority_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddlRank = (DropDownList)sender;

    int swapIndex;
    string sameDdlSelectedItemID;


        //Get list of DDLs
        List<DropDownList> ddlRankList = new List<DropDownList>();
        ddlRankList.Add(ddlBiometricNoOrder);
        ddlRankList.Add(ddlDateTimeOrder);
        ddlRankList.Add(ddlTransactionTypeOrder);

        //Store ListItems for DDL
        List<string> strRankList = new List<string>();
        strRankList.Add("First");
        strRankList.Add("Second");
        strRankList.Add("Third");

        //Holds temp. DDL
        List<DropDownList> tempRankList = new List<DropDownList>();

        //Remove the '<-- Select -->' item when ddl is changed
        if(ddlRank.Items.Contains(new ListItem("<-- Select -->")))
            ddlRank.Items.RemoveAt(0);                

        //Loop on each List<T>
        for(int x = 0; x < ddlRankList.Count; x++)
        {
            for (int y = 0; y < ddlRankList.ElementAt(x).Items.Count; y++)
            {
                if (ddlRankList.ElementAt(x).Items[y].Text != ddlRank.SelectedItem.Text)
                {
                    //Check amongst the unselected item to be changed (int swapIndex)
                    swapIndex = Convert.ToInt32(ddlRankList.ElementAt(x).Items[y].Value);
                }
            }
        }

        foreach (DropDownList ddl in ddlRankList)
        {
            foreach (string strRank in strRankList)
            {
                if (ddlRank.SelectedItem.Text == ddl.SelectedItem.Text)
                {
                    sameDdlSelectedItemID = ddl.ID;

                    //Set the ddl SelectedIndex
                    ddl.SelectedIndex = //This is my question;

                }
            }
        }

}

1 个答案:

答案 0 :(得分:0)

我看到您已经考虑过在服务器端重新填充列表的方法。是否有任何特定的原因,因为服务器回发可能是昂贵的。相反,为什么不考虑基于jquery / javascript的解决方案,其中列表根据用户选择的值进行操作。

您也可以实施基于事件的模型。请参阅this