web-dev-qa-db-fra.com

Le meilleur moyen de vérifier si une liste déroulante contient une valeur?

Lorsque l'utilisateur accède à une nouvelle page, l'index sélectionné de ce ddl est déterminé par un cookie, mais si le ddl ne contient pas la valeur de ce cookie, j'aimerais qu'il soit défini sur 0. Quelle méthode dois-je utiliser pour le ddl? Une boucle est-elle la meilleure solution ou existe-t-il une instruction simplement si je peux exécuter?

C’est ce que j’ai essayé, mais ça ne retourne pas un bool.

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

Deux méthodes me viennent à l’esprit:

Vous pouvez utiliser Contains comme suit:

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

ou modifier 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, à la différence qu’il effectue une recherche en fonction de valeurs.

121
Scott Anderson

Cela va retourner un article. Changer simplement en:

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

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

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

Ceci sélectionne automatiquement l’élément de liste approprié, si la DDL contient la valeur du cookie. S'il ne le contient pas, cet appel ne modifiera pas la sélection et restera donc sur la sélection par défaut. Si ce dernier est identique à la valeur 0, c'est la solution idéale pour vous.

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

5
Tobias
ListItem item = ddlComputedliat1.Items.FindByText("Amt D");
if (item == null) {
    ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text);
}

Et ça:

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

Sur C # cela fonctionne:

        if (DDLAlmacen.Items.Count > 0)
        {
            if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes")
            {
                DDLAlmacen.SelectedValue = "AlmacenDefectoAndes";
            }
        }

Mise à jour:

Traduire le code ci-dessus en Visual Basic ne fonctionne pas. Il renvoie "System.NullReferenceException: la référence à un objet n'est pas définie sur une instance d'un objet .."

Alors. pour que cela fonctionne sur Visual Basic, j'ai dû changer le code comme suit:

        If DDLAlmacen.Items.Count > 0 Then
            If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then
                DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"
            End If
        End If
1
Nathan

Parfois, la valeur doit être supprimée des espaces ou elle ne sera pas mise en correspondance. Dans ce cas, cette étape supplémentaire peut être utilisée ( source ):

if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}
0
bestinamir

Si la fonction ne retourne rien, vous pouvez essayer ceci ci-dessous

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}
0
Mia Zhang

Vous pouvez essayer de vérifier si cette méthode renvoie un null:

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

// vous pouvez utiliser le? opérateur au lieu de si

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";
0
Alejandro Haro