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();
Ответы
Ответ 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