Во-первых, это приложение для журнала смен сотрудников.

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

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

Shift Log Form

0
William Burke 25 Сен 2018 в 00:58

2 ответа

Лучший ответ

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

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

0
William Burke 16 Окт 2018 в 15:18

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

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

0
William Burke 28 Сен 2018 в 14:40