Связанные значения заполнения ComboBox из справочной таблицы

Прежде всего, это приложение журнала смены сотрудника.

Сотрудник входит в систему и выбирает машины, с которыми он будет работать. Обычно это две машины, но если кто-то не появляется, он может войти в систему как 4.
у меня есть WinForm это имеет ComboBox привязан к полю в Shift_Log Таблица.

Моя проблема заключается в том, что Combobox привязан к полю Shiftlog_ID и показывает вместо имени оператора operator_id. В раскрывающемся списке отображаются имена сотрудников, но после выбора отображается идентификатор. Мне нужно, чтобы всегда отображалось имя сотрудника. Я думаю, я ожидаю многого. Нужно ли отменять привязку комбо и писать код в событии cmbOperator_SelectedValueChange_Changed, чтобы сохранить идентификатор в поле shiftlog. Затем мне нужно было бы поместить код в форму загрузки, чтобы отобразить имя текущего сотрудника на основе идентификатора, хранящегося в записи. Я сделал кучу в VB.Net это мой первый C# проект. Не думал, что это будет так сложно. Определенно кривая обучения. Если бы кто-то мог просто указать мне правильное направление, я был бы очень благодарен.
Спасибо.

Форма смены журнала

2 ответа

Решение

Кажется, что когда я перетаскивал поле со вкладки "Источник данных" на экран, среда IDE добавила привязку к текстовому значению. Затем, когда я обновил поле со списком через смарт-тег элемента управления, он добавил вторую привязку. Коллега заметил, что у меня было две привязки, как только первая привязка к текстовому значению была удалена, это сработало. Кстати, чтобы заставить его работать с первой записью, я перенес привязку в FormLoad. Теперь он показывает имя оператора и сохраняет идентификатор и не выдает ошибку при переходе между записями. Спасибо за все Ваши ответы.

cmbOperator.DataBindings.Add (new Binding ("SelectedValue", this.shift_LogBindingSource, "Operator", true));

Я пробовал несколько разных способов заполнить поле со списком. Первый был через использование смарт-тега. Выбор таблицы сотрудников в качестве источника, имени в качестве отображения и инициалов в качестве значения. Я подумал, что, возможно, Selected Value будет полем selectedvalue, которое также будет сохранено. Во-вторых, я попробовал код.

        private void fillcmbOperator()
    {
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.LazerMaintenance_Conn))
        {
            try
            {
                string query = "SELECT Operators.Initials, Operators.Name " +
                       "FROM Operators WHERE Operators.Active_Ind = 'True'";

                SqlDataAdapter da = new SqlDataAdapter(query, conn);
                conn.Open();

                DataSet ds = new DataSet();
                da.Fill(ds, "dsOperators");

                cmbOperator.ValueMember = "Initials";
                cmbOperator.DisplayMember = "Name";
                cmbOperator.DataSource = ds.Tables["dsOperators"];

                conn.Close();

            }
            catch (Exception ex)
            {
                // write exception info to log or anything else
                MessageBox.Show("Error occured! : " + ex);
            }
        }
    }

Кстати, выбор принтера на DGV работает отлично. Я полностью настроил его с помощью всплывающего меню "Редактировать столбцы".

Коллекции "Редактировать столбцы" всплывающее

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