Что мешает установить Combobox SelectedValue?

У меня есть несколько выпадающих списков, весь код похож, и только один, CustomerSelector.SelectedValue, не работает. Я даже пытался установить такое значение: CustomerSelector.SelectedValue=32.

Этот метод предназначен для загрузки всей информации о проекте в форму и вызывается в событии загрузки формы. Данные, кажется, загружаются нормально, я даже загрузил «id» в DisplayMember для проверки.

Есть идеи, что мешает установке SelectedValue?

        void loadProjectInfo()
        {
            if (isProjectInfoLoaded == false)
            {
                try
                {
                    DataTable dt4 = new DataTable();
                    DBConnector db4 = new DBConnector();
                    db4.query = "SELECT * FROM s1_pm_project WHERE id = " + JobID;
                    dt4 = db4.getDataTable();
                    DataRow PMProject = dt4.Rows[0];

                    ProjectNameTextbox.Text = PMProject["ProjectName"].ToString();
                    this.Text = ProjectNameTextbox.Text;

                    ProjectAddressTextbox.Text = PMProject["Address"].ToString();
                    ProjectAddressCity.Text = PMProject["City"].ToString();

                    ProjectAddressState.DataSource = USStates.States();
                    ProjectAddressState.ValueMember = "Abbreviations";
                    ProjectAddressState.DisplayMember = "Abbreviations";
                    ProjectAddressState.SelectedIndex = -1;
                    if (!Convert.IsDBNull(PMProject["State"]))
                        ProjectAddressState.SelectedValue = PMProject["State"].ToString();
                    ProjectAddressPostalCode.Value = (!Convert.IsDBNull(PMProject["ZipCode"])) ? Convert.ToInt32(PMProject["ZipCode"]) : 00000;

                    DBConnector db5 = new DBConnector();
                    db5.query = "SELECT id, Name FROM s1_customer ORDER BY Name ASC";
                    CustomerSelector.DisplayMember = "Name";
                    CustomerSelector.ValueMember = "id";
                    CustomerSelector.DataSource = db5.getDataTable();
                    CustomerSelector.SelectedIndex = -1;
                    //if (!Convert.IsDBNull(PMProject["CustomerID"]))
                    //    CustomerSelector.SelectedValue = Convert.ToInt32(PMProject["CustomerID"]);
                    CustomerSelector.SelectedValue=32;


                    DBConnector db1 = new DBConnector();
                    db1.query = "SELECT id, description FROM s1_app_status WHERE id < 2";
                    ProjectInfo_Status.DataSource = db1.getDataTable();
                    ProjectInfo_Status.DisplayMember = "description";
                    ProjectInfo_Status.ValueMember = "id";
                    ProjectInfo_Status.SelectedValue = Convert.ToInt32(PMProject["IsActive"]);

                    DBConnector db2 = new DBConnector();
                    db2.query = "SELECT id, description FROM s1_pm_roll";
                    ProjectInfoRollSelector.DataSource = db2.getDataTable();
                    ProjectInfoRollSelector.ValueMember = "id";
                    ProjectInfoRollSelector.DisplayMember = "description";
                    ProjectInfoRollSelector.SelectedIndex = -1;
                    if (Convert.ToInt32(PMProject["RollID"]) > 0)
                        ProjectInfoRollSelector.SelectedValue = Convert.ToInt32(PMProject["RollID"]);

                    DBConnector db3 = new DBConnector();
                    db3.query = "SELECT id, fullname FROM s1_user WHERE id>1";
                    ProjectInfoPMSelector.DataSource = db3.getDataTable();
                    ProjectInfoPMSelector.ValueMember = "id";
                    ProjectInfoPMSelector.DisplayMember = "fullname";
                    ProjectInfoPMSelector.SelectedIndex = -1;
                    if (Convert.ToInt32(PMProject["PMID"]) > 0)
                        ProjectInfoPMSelector.SelectedValue = Convert.ToInt32(PMProject["PMID"]);


                    ProjectInfoJobNoTextbox.Text = PMProject["JobNo"].ToString();
                    ProjectInfoValueTextbox.Value = Convert.ToDecimal(PMProject["ApproxValue"]);
                    if (!Convert.IsDBNull(PMProject["StartDate"]))
                        StartDateSelector.Value = Convert.ToDateTime(PMProject["StartDate"]);
                    if (!Convert.IsDBNull(PMProject["ProjectedEndDate"]))
                        ProjectedEndDateSelector.Value = Convert.ToDateTime(PMProject["ProjectedEndDate"]);
                    if (!Convert.IsDBNull(PMProject["EndDate"]))
                        EndDateSelector.Value = Convert.ToDateTime(PMProject["EndDate"]);
                    CustomerPOTextbox.Text = PMProject["CustomerPO"].ToString();
                    SalesTaxRateTextbox.Value = Convert.ToDecimal(PMProject["SalesTaxRate"]);
                    if (!Convert.IsDBNull(PMProject["WarrantyBegin"]))
                        WarrantyBegin.Value = Convert.ToDateTime(PMProject["WarrantyBegin"]);
                    if (!Convert.IsDBNull(PMProject["WarrantyEnd"]))
                        WarrantyEnd.Value = Convert.ToDateTime(PMProject["WarrantyEnd"]);
                    
                    loadContactList();

                }
                catch (Exception ex)
                {
                    Errors.Exception(ex);
                }

                isProjectInfoLoaded = true;
            }
        }

Это вывод из SELECT id, Name FROM s1_customer ORDER BY Name ASC:

я быИмя
2218-8 Шерман-Оукс
206Алехо Луго
233Американо Билдерс, ООО
235АМС Солюшнс, Инк.
1Аррис Строители, Инк.
209Крис Троуэр
105Системы управления охлаждением CME
53Положения береговой линии
117Кортек Констракшн, Инк.
6Услуги по поддержке развития, Inc.
146Ист Бэй Ресторан Поставка Инк
31Фитнес-мания
7Фулкрам Строительство
32Хардести энд Ассошиэйтс, Инк.
135Ховардс Приборы, Инк.
9Джей Рэй Строительство
10Металлические изделия J&L
12Джаханна Л. Николс Дизайн интерьера, Inc.
69Джеймс Барб Констракшн, Инк.
61JRE Construction, Inc.
13Камран и Компания, Инк.
15LA Deli Distributors, Inc.
98Ловиса Америка, ООО
40Мобильный клиент
120Н КОРОНА
180Н САНТА КЛАРА
5ПРОДАЖА УСЛУГ N
129ООО "Оранжкрест Пропертиз"
223Другой клиент
78Пасифик Вестлайн, Инк.

Выход из SELECT * FROM s1_pm_project WHERE id=:

я быНазвание проектаАктивенПользовательский ИДRollIDPMIDJobNoПриблизительное значениеДата началаДата окончанияПроецеденддатеЗаказ клиентаСтавка налога с продажEstimateIDГарантияНачатьГарантияКонец
141Горьяна - Карловы Вары1321232219937000,002022-02-072022-04-292022-04-2922-012-230,00НУЛЕВОЙ2022-04-292023-04-29

Где/когда вы используете этот код? -- Не исключайте метод, содержащий код, который вы публикуете. Когда это не имеет смысла само по себе, также включите контекст, в котором вызывается.

Jimi 05.05.2022 20:44

Если вы не получаете никаких ошибок, а другие поля со списком работают успешно, то уверены ли вы на 100%, что значения, возвращаемые из… Convert.ToInt32(PMProject["CustomerID"]) …, действительно являются допустимыми значениями, которые существуют в списке элементов поля со списком?

JohnG 06.05.2022 05:02

Если значение НЕ существует в списке элементов поля со списком, оно просто проигнорирует его и продолжит работу, ошибка не будет выдана. Строка кода... CustomerSelector.SelectedValue = Convert.ToInt32(PMProject["CustomerID"]);... кажется хорошим местом для точки останова, чтобы вы могли проверить и убедиться, что возвращаемые значения являются значениями, которые действительно существуют в списке элементов со списком.

JohnG 06.05.2022 05:03

@ Джими… спасибо за информацию. Я этого не знал. Однако выложенный код не выглядит так, как будто он находится в конструкторе формы, согласитесь, это плохое предположение с моей стороны, но если он находится в событии загрузки или вообще «после» конструктора, то разве код не должен работать? И почему другие поля со списком работают?

JohnG 06.05.2022 06:18

@JohnG Вот почему я попросил уточнить, в каком контексте вызывается этот код, а также когда [метод] не имеет смысла сам по себе, также включите контекст, в котором вызывается. Я не мог дозвониться до ОП, видимо.

Jimi 06.05.2022 06:24

@ Джими ... Я понимаю на 100%, я почти оцепенел от разъяснения ОП явно необходимой информации. Очевидно, я делаю много предположений, но это не редкость, когда ОП опускает необходимую информацию, как я уверен, вы уже знаете. Но спасибо за информацию о настройке значения комбо и конструкторе форм, я не знал об этом… Так что, спасибо, что указали на это.

JohnG 06.05.2022 06:41

@Jimi Этот метод вызывается в форме события загрузки.

Mike 06.05.2022 20:05

Вам не нужно говорить мне, вы должны добавить информацию к вопросу. -- В любом случае, у вас есть SELECT id, Name FROM s1_customer, затем CustomerSelector.DisplayMember = "Name"; CustomerSelector.ValueMember = "id";, поэтому для SelectedValue должно быть установлено значение, представляющее id, но у вас есть CustomerSelector.SelectedValue = Convert.ToInt32(PMProject["CustomerID"]): поле CustomerID отсутствует в запросе и псевдоним отсутствует, следовательно, это null, или это вызывает исключение .

Jimi 06.05.2022 20:25

@Jimi PMProject["CustomerID"] — это поле из другого запроса, см. выше. Чтобы проверить, работает ли это, я сделал MessageBox.Show(PMProject["CustomerID"].ToString());, и он отображает действительное значение. Кроме того, я пробовал CustomerSelector.SelectedValue=32, и до сих пор безуспешно.

Mike 06.05.2022 20:59

Запрос - это то, что установлено в db5.query, я понятия не имею, что такое PMProject["CustomerID"], его тип, является ли он допустимым селектором для чего db5.getDataTable(), какова связь между s1_pm_project и s1_customer, если есть, то значение, которое вы пытаетесь установить на самом деле является частью того, что ComboBox имеет в качестве источника данных и т. д. -- Это, как правило, очень запутанная настройка, неудивительно, что она может вести себя хаотично.

Jimi 06.05.2022 21:25

@Jimi Я опубликовал результаты запросов, также в целях тестирования, я пытался выбрать такое значение CustomerSelector.SelectedValue=32, но безуспешно.

Mike 06.05.2022 22:20

Я проверил ваш код несколько раз, и он работает так, как ожидалось. Должно быть что-то еще. Если источник данных полей со списком установлен так, как вы показываете с данными, которые вы показываете… тогда он ДОЛЖЕН работать. Я предлагаю вам создать небольшой минимальный воспроизводимый пример, который воспроизводит проблему. Пожалуйста, редактировать свой вопрос и опубликуйте код, который четко воспроизводит проблему, которую вы описываете. Я хочу сказать, что без ясного примера проблемы, которую мы можем воспроизвести… предположения — это все, что вы можете получить.

JohnG 07.05.2022 03:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема оказалась с базой данных, в частности с полем id в s1_customer. По какой-то причине он имел атрибут «неподписанный». Когда это было удалено, все заработало, как ожидалось.

Другие вопросы по теме