0

我反复遇到这个问题,不知道是什么原因造成的。我在 DataBind 中遇到异常:

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

以下是一些重要信息:

  1. 当基础数据发生变化时,我会定期重新加载 listOrgs。
  2. Organization.DTListAll 调用返回大约 500 个 Int、String 对。
  3. 返回的数据中没有重复值或空值
  4. 下面前两行之后,listOrgs.Items.Count 为 0,Selected Value 为 0
  5. DataBind操作执行时选择的值是一个不在返回的ID值集中的值

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

1 回答 1

0

检查现有值

    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();
    }

除此之外 - 您可能想在绑定之前尝试设置 datatext 和 datavalue 字段(afaik 那是性能++)

于 2010-04-21T14:03:13.257 回答