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