Связанные значения заполнения ComboBox из справочной таблицы - PullRequest
0 голосов
/ 25 сентября 2018

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

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

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

Shift Log Form

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

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

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

0 голосов
/ 28 сентября 2018

Я пробовал несколько разных способов заполнить поле со списком.Первый был через использование смарт-тега.Выбор таблицы сотрудников в качестве источника, имени в качестве отображения и инициалов в качестве значения.Я подумал, что, возможно, 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 работает отлично.Я полностью настроил его через всплывающее меню «Редактировать столбцы».

Всплывающее меню "Правка столбцов"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...