2009-06-08 7 views
0

J'ai une collection de Roles.GetAllRoles() sur les fournisseurs d'appartenance. Maintenant, j'ai un rôle "administrateur système" que je voudrais supprimer de cette liste afin que je puisse utiliser dans ma liste. Comment puis-je faire cela?Comment supprimer l'un des éléments dans Roles.GetAllRoles()

public void AssignUserToRoles_Activate(object sender, EventArgs e) 
     { 
      try 
      { 
       AvailableRoles.DataSource = Roles.GetAllRoles(); 
       AvailableRoles.DataBind(); 
      } 
      catch (Exception err) 
      { 
       // 
      } 
     } 

Répondre

0

Si vous vouliez vous pouvez utiliser LINQ pour convertir le tableau dans une liste ...

var roles = Roles.GetAllRoles().ToList(); 
roles.Remove("Administrator"); //Yank out the admin role... 

AvailableRoles.DataSource = roles; 
AvailableRoles.DataBind(); 

Tous vos databinding fonctionnera très bien avec un List<String>

MISE À JOUR:

ToList<T>() est un extension method qui fait partie de l'ensemble .Net 3.5. Vous devez vous assurer que votre projet cible cette version du framework et vous devez vous assurer que votre projet fait référence à System.Core.

Une fois que vous avez cette référence, vous devez ajouter une déclaration Using en haut du fichier de votre code se trouve à l'adresse:

using System.Linq; 

Si vous avez toutes ces ces choses, alors vous devriez commencer à voir un groupe de nouvelles méthodes d'extension apparaissent dans intellisense.

+0

C'est bizarre. Je ne reçois pas le ToList() après Roles.GetAllRoles()?!?! – dcpartners

+0

@dewacorp: la liaison de données fonctionne avec les interfaces de collecte, y compris IEnumnerable , et pas seulement les types de collection concrets. – Richard

0

Roles.GetAllRoles() retourne un tableau de chaînes que vous pouvez filtrer en utilisant ce code:

 string[] roles = Roles.GetAllRoles(); 
     var v = from role in roles 
       where role != "System Administrator" 
       select role; 

     AvailableRoles.DataSource = v; 
     AvailableRoles.DataBind(); 
2

Il peut atteindre sans ajouter de lignes supplémentaires à votre code.

public void AssignUserToRoles_Activate(object sender, EventArgs e) 
     { 
      try 
      { 
       AvailableRoles.DataSource = Roles.GetAllRoles().Except(new [] {"System Administrator"}); 
       AvailableRoles.DataBind(); 
      } 
      catch (Exception err) 
      { 
       // 
      } 
     } 

Commentaires: pas sûr pourquoi avez-vous besoin d'essayer ... attraper ici. Mais peu importe, cette solution me semble propre.

+0

Impossible de faire cela non plus: Roles.GetAllRoles(). Except (new [] {"System Administrator"}); Aucune méthode pour Except? !!? – dcpartners

+0

"using System.Linq". Je pensais que c'était évident. Ceci est une méthode d'extension dans la DLL "System.Core". –