2011-01-26 23 views
0

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

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

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

我的问题是,我该如何交换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

您应该使用Javascript。 – SLaks 2011-01-26 01:55:01

回答

0

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

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