我的想法是使用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;
}
}
}
}
答案 0 :(得分:0)
我看到您已经考虑过在服务器端重新填充列表的方法。是否有任何特定的原因,因为服务器回发可能是昂贵的。相反,为什么不考虑基于jquery / javascript的解决方案,其中列表根据用户选择的值进行操作。
您也可以实施基于事件的模型。请参阅this