2010-08-27 5 views
13

J'ai une liste déroulante ASP.NET que j'ai remplie via la liaison de données. J'ai le texte qui correspond au texte d'affichage pour la liste que je veux être sélectionné. Je ne peux évidemment pas utiliser SelectedText (getter uniquement) et je ne connais pas l'index, donc je ne peux pas utiliser SelectedIndex. Je sélectionne actuellement l'élément en parcourant la liste complète, comme indiqué ci-dessous:Comment pouvez-vous définir l'élément sélectionné dans une liste déroulante ASP.NET via le texte d'affichage?

ASP:

<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; 
    } 
} 

Est-il possible de le faire sans itérer tous Les objets?

+0

Cela pourrait être une simple question/stupide , mais je suis assez nouveau pour les Webforms ASP. –

+2

certainement pas simple ou stupide. @kbrimington a la bonne réponse pour vous. –

Répondre

39

Vous pouvez 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'un des éléments EXISTE correspondant à votre texte d'affichage, vous pouvez avoir besoin de vérifier les résultats de FindByText() pour null.

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

+1

tu m'as battu pour ça. J'utilise la première option. –

+1

la vérification de référence null doit être utilisée sur l'une ou l'autre de ces options. Vous ne pouvez pas garantir que le texte sera là. –

+0

@rock: Merci pour votre réponse. J'ai ajouté une note expliquant quand je choisirais l'un plutôt que l'autre. – kbrimington

1

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

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

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

Son fonctionne bien ..

drplistcountry.SelectedIndex = 
drplistcountry.Items.IndexOf(drplistcountry.Items.FindByText("--Select--")); 

Ou

drplistcountry.ClearSelection(); 
drplistcountry.SelectedIndex = 
drplistcountry.Items.IndexOf(drplistcountry.Items.FindByText("--Select--")); 
Questions connexes