Подтвердить что ты не робот

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

Я неоднократно сталкивался с этой проблемой и не знаю, что ее вызывает. Я получаю исключение в DataBind: SelectedValue which is invalid because it does not exist in the list of items.

Вот некоторые важные сведения:

  • Периодически я перезагружаю listOrgs, когда базовые данные изменились.
  • Вызов Organization.DTListAll возвращает 2 пары Int, String.
  • В возвращаемых данных нет дублирующихся или нулевых значений
  • После первых двух строк ниже, listOrgs.Items.Count равен 0, а выбранное значение равно 0
  • Выбранное значение после выполнения операции DataBind - это значение ID из первой строки в данных
  • Это исключение происходит в первый раз, когда этот код выполняется после новой загрузки страницы.
listOrgs.Items.Clear(); 
listOrgs.SelectedValue = "0"; 
listOrgs.DataSource = new Organization().DTListAll(SiteID); 
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind();
4b9b3361

Ответ 1

По-видимому, решение, которое я опубликовал, было не совсем эффективным... В конечном итоге в моем приложении я изменил это:

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

Ответ 2

Я продолжал получать эту ошибку.
Странно то, что до того, как я установил источник данных и переделку после удаления элемента, выбранный индекс = -1.

Если я явно устанавливаю selectedIndex = -1;, тогда он работает и не выдает ошибку.

Таким образом, хотя он уже установил -1, чтобы он остановил его от ошибки.

Странно, а??//" >

Ответ 3

Попробуйте установить listOrgs.SelectedValue = "0" после обновления DataSource

В настоящий момент вы пытаетесь выбрать первый элемент в пустом списке.

Ответ 4

Если у вас все еще есть эта проблема, я решил:

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

Ответ 5

Не уверен, что это ваш случай, но у меня была такая же проблема, и, видимо, не было объяснений, тогда я понял, что сделал копию и вставлял в блокнот поля базы данных, что в начале значения был NULL.

Любопытная вещь заключалась в том, что работали таблицы для выбора. Я удалил строку и снова вставлял ее после того, как работал нормально.

Ответ 6

@PMarques ответ помог мне и решил мою проблему.

Однако во время экспериментов он щелкнул в моей голове, почему я впервые получил ошибку.

Я устанавливал атрибут "Текст", думая, что он может создать охватывающую метку или полевой набор + легенда для меня (а это не так).

Свойства текста для списка infact свойство SelectedValue для ListControl.

Итак, моя ошибка в неправильном толковании того, что сделало текстовое свойство.

Ответ 7

Измените первые две строки следующим образом:

listOrgs.SelectedItem.Selected = false; 
listOrgs.Items.Clear(); 

Ответ 8

Я неоднократно получал ту же ошибку и пытался завершить работу, не устанавливая значение по умолчанию для индекса -1.

Я прокомментировал свой код ddlDRIBidAmt.SelectedValue = -1

Это значение было установлено в то время, когда мои параметры страницы были reset равными значениям по умолчанию.

Ответ 9

Я знаю, что слишком поздно ответить, но то, что я пробовал, - грязное решение, но оно сработало. После привязки данных я вставляю элемент с индексом 0

ddl.Items.Insert(0, new ListItem("---Select---","-1"));

И при настройке

Я помещаю try catch, В catch я устанавливаю значение -1