如何从下拉列表中搜索项目

时间:2014-02-15 02:26:23

标签: c# html5 web

我正在尝试搜索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";
            }   
        }      
    }

2 个答案:

答案 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";
}