Comment remplir une liste déroulante à l’aide d’un object List

J’ai une liste déroulante.

J’ai besoin de le peupler avec l’élément collecté dans une List .

Dans mon script, le collecteur a été correctement rempli.

Mais je ne peux pas renseigner DropDownList. Je reçois une erreur:

 DataBinding: 'System.Web.UI.WebControls.ListItem' does not contain a property with the name 'UserName'."} 

  

 List myListUsersInRoles = new List(); foreach (aspnet_Users myUser in context.aspnet_Users) { // Use of navigation Property EntitySet if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR")) myListUsersInRoles.Add(new ListItem(myUser.UserName.ToSsortingng(), myUser.UserId.ToSsortingng())); } uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE???? uxListUsers.DataBind(); 

Des idées? Merci

Lorsque vous initiez l’object listItem, vous initiez les propriétés (texte, valeur)

 EX ( new ListItem(myUser.User (Text PROPERTY), myUser.UserId.ToSsortingng() (Value PROPERTY) ) 

essayer de lier cela avec

   

la liste déroulante prendra les propriétés de texte et de valeur qui sont stockées dans l’object ListItem

et le montrer dans l’interface utilisateur

Il semble que vous vous connectiez à une liste d’objects ListItem, qui n’exposent pas une propriété UserName ou UserId. Il suffit d’effacer ces propriétés (DataTextField et DataValueField) et vous devriez être prêt à partir.

Ou mieux encore, ajoutez simplement les éléments de la liste que vous avez créés au menu déroulant et sautez la liaison.

Comme le dit l’erreur, System.Web.UI.WebControls.ListItem n’a pas de membre UserName. Il a des membres Text et Value. Essayez ce qui suit

  

sa si simple suffit d’utiliser ListItemCollection au lieu de la liste générique Liste ici il est

change ta première ligne

  ListItemCollection myListUsersInRoles = new ListItemCollection(); foreach (aspnet_Users myUser in context.aspnet_Users) { // Use of navigation Property EntitySet if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR")) myListUsersInRoles.Add(new ListItem(myUser.UserName.ToSsortingng(), myUser.UserId.ToSsortingng())); } uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE???? uxListUsers.DataBind(); 

Ne liez pas ListItems à une liste, ajoutez-les simplement. La liaison est un moyen d’utiliser les fonctions intégrées d’un ListControl pour convertir des objects en ListItems . Etant donné que vous avez déjà effectué la conversion, économisez du travail pour vous et le serveur et utilisez Clear and Items.AddRange place de DataSource et DataBind :

 uxListUsers.Clear(); uxListUsers.Items.AddRange(myListUsersInRoles;) 

Vous devrez également supprimer les directives de liaison de l’aspx:

  

Il n’y a pas de nom d’utilisateur et UserId dans une liste générique. Votre meilleure option, si le nommage est important, est de créer un object contenant les deux champs auxquels vous devez vous lier plutôt que de vous lier à ListItem. Si vous devez vous lier à ListItem, considérez Valeur et Texte comme points de liaison.

Peut-être la manière la plus simple d’utiliser la reflection

 uxListUsers.DataSource = typeof(ListItem).GetProperties(); uxListUsers.DataTextField = "Name"; //This is name of property enumerable typeof(ListItem).GetProperties().AsEnumerable().Select(p => new { p.Name }) uxListUsers.DataBind(); 
 ListItem LI = new ListItem(); LI.Value = Convert.ToSsortingng("value"); LI.Text = Convert.ToSsortingng("text"); DrpDwnlist.Items.Add(LI);