SelectedValue, который недействителен, поскольку его нет в списке элементов

Я неоднократно сталкивался с этой проблемой и не знаю, в чем ее причина. Я получаю исключение в 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, а выбранное значение равно 0.
  5. Выбранное значение при выполнении операции DataBind — это значение, которого нет в наборе возвращаемых значений идентификатора.

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

person Bob Jones    schedule 04.09.2009    source источник


Ответы (1)


Проверить существующее значение

    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, это производительность ++)

person riffnl    schedule 21.04.2010