web-dev-qa-db-fra.com

Comment définir l'élément sélectionné dans une liste déroulante ASP.NET via le texte à afficher?

J'ai un menu déroulant ASP.NET que j'ai rempli via la liaison de données. J'ai le texte qui correspond au texte d'affichage pour l'élément de liste que je veux sélectionner. Je ne peux évidemment pas utiliser SelectedText (getter uniquement) et je ne connais pas l'index, je ne peux donc pas utiliser SelectedIndex. Je sélectionne actuellement l'élément en parcourant toute la liste, comme indiqué ci-dessous:

ASPIC:

<asp:DropDownList ID="ddItems" runat="server" /> 

Code:

ddItems.DataSource = myItemCollection;
ddItems.DataTextField = "Name";
ddItems.DataValueField = "Id";

foreach (ListItem item in ddItems.Items)
{
    if (item.Text == textToSelect)
    {
        item.Selected = true;
    }
}

Y a-t-il un moyen de faire cela sans parcourir tous les éléments?

16
Ed Schwehm

Tu peux essayer:

ddItems.Items.FindByText("Hello, World!").Selected = true;

Ou:

ddItems.SelectedValue = ddItems.Items.FindByText("Hello, World!").Value;

Notez que si vous n’êtes pas certain qu’il existe un élément correspondant à votre texte, vous devrez peut-être vérifier les résultats de FindByText() pour null.

Notez que j'utilise la première approche sur une liste à sélection multiple, telle qu'une CheckBoxList pour ajouter une sélection supplémentaire. J'utilise la deuxième approche pour remplacer toutes les sélections.

42
kbrimington

Utilisez la méthode FindByText de la classe ListItemCollection, telle que:

ListItem itemToSelect = ddlItems.Items.FindByText("some text to match");

if(itemToSelect != null)
{
    itemToSelect.Selected = true;
}
1
KP.

Si vous devez sélectionner le texte d'élément sélectionné dans la liste déroulante pour plusieurs cas, utilisez cette méthode.

// Call Method
SelectDropdownItemByText(ddlDropdown.Items.FindByText("test"));

// Define method
public void SelectDropdownItemByText(ListItem item)
{
    if (item != null)
    {
        item.Selected = true;
    }
}
0
Manjunath Bilwar