2013-06-13 1 views
0

J'ai une listbox avec des données de SQL DB. Au chargement de la page, je souhaite sélectionner plusieurs éléments en fonction des données provenant du résultat de ma requête. Il ne me donne pas d'erreurs et ne fonctionne pas non plus. Voici le code. Il ne me donne pas d'erreur et ne sélectionne aucun élément.J'essaie de plusieurs façons et ne fonctionne toujours pas. Une idée?Pourquoi Listbox La sélection multiple ne fonctionne pas au chargement de la page?

+1

comment voulez-vous remplir la collection 'ListBox1.Items'? –

+0

@ Knaģis Il se lie aux données de la table de base de données. Atrh

+0

Avez-vous vérifié que votre code s'exécute APRÈS? votre ListBox est DataBound. D'après ce que je vois, cela semble douteux. – jbl

Répondre

1

Supprimer cet articles code électoral de votre PageLoad et le mettre dans une autre méthode (par exemple SelectItems) Quelque part dans votre page, vous devez avoir un ou plusieurs appels ListBox1.DataBind();. Appelez SelectItems immédiatement après ces appels ListBox1.DataBind();.

Je suppose également votre code pourrait être écrit comme ceci en utilisant Linq

public void SelectItems() 
{ 
ListBox1.SelectionMode = ListSelectionMode.Multiple; 
var userinfos = AppDataAccess.retrieveUsers(id); 

var val = userInfos.Rows.SelectMany(r=>r["GroupNumber"].ToString().Split(',')) 
    .Distinct().ToList() 

    //loop to select multiple items // could also be converted to Linq. Not sure it would be useful 
    foreach (string per in val) 
     { 
     if (ListBox1.Items.FindByValue(per.ToString()) != null) 
      { 
      ListBox1.Items.FindByValue(per.ToString()).Selected = true; 
      } 
     } 

}

+0

Merci ... ça marche .. – Atrh

+0

@Ath thx pour le suivi. Vous pouvez accepter une réponse alors – jbl

2

Vous pouvez essayer l'inverse, la boucle tous ListItems et définir chaque propriété Selected:

foreach(DataRow row in userinfo.Rows) 
{ 
    string group = row.Field<String>("GroupNumber"); 
    string[] vals = group.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
    foreach(ListItem item in ListBox1.Items) 
    { 
     item.Selected = vals.Contains(item.Value); 
    } 
} 
0

mis SelectionMode="Multiple" pour ListBox.

+1

Mais OP a même mis par programme comme vous pouvez le voir dans son code: 'ListBox1.SelectionMode = ListSelectionMode.Multiple;' –

+0

oh désolé je n'ai pas vu cela. –

Questions connexes