67 votes

La meilleure façon de vérifier si une liste déroulante contient une valeur?

Lorsque l'utilisateur accède à une nouvelle page, ce ddl de l'indice choisi est déterminé par un cookie, mais si le ddl ne contient que la valeur du cookie, alors j'aimerais qu'il soit le 0. Quelle méthode dois-je utiliser pour le ddl? Est une boucle de la meilleure façon, ou est-il simplement d'une instruction si je peux effectuer?

C'est ce que j'ai essayé, mais il ne veut pas retourner un booléen.

if ( !ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString() ) )
    ddlCustomerNumber.SelectedIndex = 0;

141voto

Scott Anderson Points 7522

Il existe deux méthodes qui viennent à l'esprit:

Vous pouvez utiliser Contient de la sorte:

if (ddlCustomerNumber.Items.Contains(new 
    ListItem(GetCustomerNumberCookie().ToString())))
{
    // ... code here
}

ou la modification de votre stratégie actuelle:

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != null)
{
    // ... code here
}

EDIT: Il y a aussi un DropDownList.Items.FindByValue qui fonctionne de la même manière que FindByText, à l'exception des recherches basées sur des valeurs à la place.

9voto

Nathan Wheeler Points 4068

Qui va retourner un article. Suffit d'aller dans:

if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null)
    ddlCustomerNumber.SelectedIndex = 0;

5voto

Tobias Points 348

Si 0 est votre valeur par défaut, vous pouvez simplement utiliser un simple affectation:

ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString();

Cela sélectionne automatiquement le bon élément de la liste, si le DDL contient la valeur du cookie. Si ce n'est pas le contenir, cet appel ne va pas changer la sélection, donc il reste à la sélection par défaut. Si cette dernière est la même que la valeur 0, alors c'est la solution parfaite pour vous.

J'utilise ce mécanisme de beaucoup et le trouve très pratique.

1voto

Rubens Farias Points 33357

Ce:

ListItem match = ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString());
if (match == null)
    ddlCustomerNumber.SelectedIndex = 0;
//else
//    match.Selected = true; // you'll probably select that cookie value

0voto

Andy Rose Points 7987

Vous pouvez essayer de vérifier pour voir si cette méthode renvoie une valeur null:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null)
    ddlCustomerNumber.SelectedIndex = 0;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X