Je rencontre ce problème à plusieurs reprises et je n'ai aucune idée de ce qui le cause. Je reçois une exception dans le DataBind: SelectedValue which is invalid because it does not exist in the list of items
.
Voici quelques informations importantes:
listOrgs.Items.Clear();
listOrgs.SelectedValue = "0";
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind();
Apparemment, la solution que j'ai publiée n'était pas totalement efficace ... Finalement, dans mon application, j'ai changé pour ceci:
listOrgs.Items.Clear();
listOrgs.SelectedIndex = -1;
listOrgs.SelectedValue = null;
listOrgs.ClearSelection(); // Clears the selection to avoid the exception (only one of these should be enough but in my application I needed all..)
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind();
J'ai continué à avoir cette erreur.
Ce qui est étrange, c'est qu'avant de définir la source de données et de relier après la suppression d'un élément, l'index sélectionné = -1.
Si je règle explicitement le selectedIndex = -1;
, alors cela fonctionne et ne génère pas d'erreur.
Donc, même s'il était déjà -1, le mettre à -1 l'empêche de se tromper.
Bizarre hein?
Essayez de définir listOrgs.SelectedValue = "0"
après avoir actualisé la DataSource
Au moment où vous essayez de sélectionner le premier élément d'une liste vide.
Je ne suis pas sûr que ce soit votre cas, mais j'avais le même problème et apparemment, il n'y avait pas d'explication. J'ai ensuite réalisé un copier-coller sur le bloc-notes d'un champ de la base de données qui, au début de la valeur, contenait une valeur NULL.
Ce qui est curieux, c’est qu’une sélection de tables de jonction fonctionnait. J'ai supprimé la ligne et réinséré, après fonctionnait bien.
Si vous avez toujours ce problème, voici comment je l'ai résolu:
listOrgs.SelectedIndex = -1; // Clears the SelectedIndex to avoid the exception
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind(); //Unless you have "listOrgs.AppendDataBoundItems = true" you don't need to clear the list
@PMarques answer m'a aidé et a résolu mon problème.
Cependant, tout en expérimentant, j'ai compris pourquoi je devais commettre l'erreur en premier lieu.
J'étais en train de définir l'attribut "Text" en pensant qu'il pourrait créer une étiquette englobante ou un jeu de champs + une légende (ce qui n'est pas le cas).
La propriété Text pour une liste englobe la propriété SelectedValue d'un ListControl.
Donc, mon erreur en interprétant mal ce que la propriété de texte a fait.
Changer les deux premières lignes avec ceci:
listOrgs.SelectedItem.Selected = false;
listOrgs.Items.Clear();
J'obtenais la même erreur à plusieurs reprises et j'essaie de finir en définissant la valeur sélectionnée par défaut sur Index -1.
J'ai commenté mon code ddlDRIBidAmt.SelectedValue = -1
Cette valeur a été définie au moment où mes contrôles de page ont été réinitialisés aux valeurs par défaut.
Je sais qu'il est trop tard pour répondre, mais ce que j'ai essayé est une solution sale, mais cela a fonctionné . Après la liaison de données, je suis insérer un élément à l'index 0
ddl.Items.Insert(0, new ListItem("---Select---","-1"));
Et au réglage,
Je suis en train d'essayer de prendre, Dans la capture je suis valeur à -1