我正在尝试搜索DropDown列表中的项目,但下面的代码只返回列表中最后一项的结果。对于其他项目,它返回“国家不存在”我应该怎么做才能使代码适用于所有项目。
protected void SearchBtn_Click(object sender, EventArgs e)
{
string a = SearchCountryTb.Text;
foreach (ListItem item in CountriesDD.Items)
{
if (item.Value == a)
{
YNLabel.Text = "country exixts";
}
else
{
YNLabel.Text = "country doesnot exist";
}
}
}
答案 0 :(得分:1)
这仅适用于最后一项,因为即使找到匹配项后您仍在循环播放。例如,如果搜索框包含第一个项目,则循环应该找到该项目,但是它将对第二个项目执行检查,该项目不匹配,标签文本将说明该项目不存在(当它确实)。如果找到匹配项,您应该break
。像这样:
foreach (ListItem item in CountriesDD.Items)
{
if (item.Value == a)
{
YNLabel.Text = "country exists";
break; //exit the loop if the item was found.
}
else
{
YNLabel.Text = "country doesnot exist";
}
}
你也可以尝试创建一个检查你的方法:
bool CountryExists(string country)
{
foreach (ListItem item in CountriesDD.Items)
{
if (item.Value == country)
{
return true;
}
}
return false;
}
然后在按钮单击处理程序中:
if (CountryExists(SearchCountryTB.Text)) YNLabel.Text = "country exists";
else YNLabel.Text = "country does not exist";
HTH
答案 1 :(得分:1)
这种情况正在发生,因为您正在运行循环并尝试将搜索选项卡文本与下拉列表进行比较,而不会在实际找到它时从循环中断开。首先将一个标志变量初始化为false,如果输入if(item.Value == a),请将标志标记为true并将其标记为break。在循环之后,检查标志是否为真,然后国家存在,否则不存在。
boolean flag = false;
foreach (ListItem item in CountriesDD.Items) {
if (item.Value == a) {
flag = true;
break; //exit the loop if the item was found.
}
}
if(flag) {
YNLabel.Text = "country exists";
} else {
YNLabel.Text = "country doesn't exist";
}