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;
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.
Cela va retourner un article. Changer simplement en:
if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
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.
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
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
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){}
Si la fonction ne retourne rien, vous pouvez essayer ceci ci-dessous
if (ddlCustomerNumber.Items.FindByText(
GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}
Vous pouvez essayer de vérifier si cette méthode renvoie un null:
if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
// vous pouvez utiliser le? opérateur au lieu de si
ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";