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