2009-09-04 6 views
0

J'ai rencontré ce problème à plusieurs reprises, et je n'ai aucune idée de la cause. Je reçois une exception dans le DataBind:SelectedValue qui n'est pas valide car il n'existe pas dans la liste des éléments

"SelectedValue which is invalid because it does not exist in the list of items" 

Voici quelques éléments d'information importants:

  1. je recharge listOrgs périodiquement lorsque les données sous-jacentes ont changé.
  2. L'appel Organization.DTListAll renvoie environ 500 paires Int, String.
  3. Il ne double ou des valeurs nulles dans les données renvoyées
  4. Après les deux premières lignes ci-dessous, listOrgs.Items.Count est 0, et la valeur sélectionnée est 0
  5. La valeur sélectionnée lorsque l'opération DataBind exécute est une valeur qui ne sont pas dans l'ensemble des valeurs d'ID retourné

listOrgs.Items.Clear(); 
listOrgs.SelectedValue = "0"; 
listOrgs.DataSource = new Organization().DTListAll(SiteID); 
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind(); 

Répondre

0

Vérifier une valeur existante

this.DropDownList1.Items.Clear(); 
    //--dont use this: 
    //this.DropDownList1.SelectedValue = "0"; 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("x", typeof(System.Int32)); 
    dt.Columns.Add("xs", typeof(System.String)); 
    for (int x = 0; x < 100; x++) 
    { 
     DataRow dr = dt.NewRow(); 
     dr["x"] = x; 
     dr["xs"] = x.ToString(); 
     dt.Rows.Add(dr); 
    } 
    DropDownList1.DataValueField = "x"; 
    DropDownList1.DataSource = dt; 
    DropDownList1.DataBind(); 
    // check for existing value: 
    int valueToCheck = 99; // last item 
    if (this.DropDownList1.Items.FindByValue(valueToCheck.ToString()) != null) 
    { 
     this.DropDownList1.SelectedValue = valueToCheck.ToString(); 
    } 

En outre - vous pouvez essayer de régler le DataText et dataValue champs avant de lier (afaik qui est une performance ++)

Questions connexes