У меня есть таблица в SQL Server, которая выглядит следующим образом:
ID Code Name Surname
1 MS Mike Smith
2 JD John Doe
3 UP Unknown Person
и так далее ...
Теперь я хочу связать данные из этой таблицы в ComboBox вспособ, которым в ComboBox я отображал значение из столбца Код.
Я делаю привязку следующим образом:
SqlDataAdapter sqlAdapter = new SqlDataAdapter("SELECT * FROM dbo.Users ORDER BY Code", MainConnection);
sqlAdapter.Fill(dsUsers, "Users");
cbxUsers.DataSource = dsUsers.Tables["Users"];
cmUsers = (CurrencyManager)cbxUsers.BindingContext[dsUsers.Tables["Users"]];
cbxUsers.DisplayMember = "Code";
И этот код, кажется, работает.Я могу прокрутить список кодов.Также я могу начать писать код вручную, и ComboBox автоматически заполняет код для меня.
Однако я хотел поставить метку в верхней части списка, чтобы отобразить имя и фамилию выбранного в данный момент кода пользователя.
Моя строка слова была такой: «Итак, мне нужно найти событие, которое сработает после изменения кода в выпадающем списке, и в этом случае я получу текущий DataRow ...»
Я просматривал события выпадающего списка, перепробовал многие из них, но безуспешно.
Например:
private void cbxUsers_SelectionChangeCommitted(object sender, EventArgs e)
{
if (cmUsers != null)
{
DataRowView drvCurrentRowView = (DataRowView)cmUsers.Current;
DataRow drCurrentRow = drvCurrentRowView.Row;
lblNameSurname.Text = Convert.ToString(drCurrentRow["Name"]) + " " + Convert.ToString(drCurrentRow["Surname"]);
}
}
Это дает мне странные результаты.Во-первых, когда я прокручиваю с помощью мыши, он не возвращает строку, которую я ожидаю получить.Например, на JD он показывает мне «Mike Smith», на MS - «John Doe», а на UP снова показывает «Mike Smith»!Другая проблема заключается в том, что когда я начинаю набирать в ComboBox и нажимаю ввод, это не вызывает событие.
Однако все работает, как и ожидалось, когда я связываю данные с lblNameSurname.Text следующим образом:
lblNameSurname.DataBindings.Add("Text", dsusers.Tables["Users"], "Name");
Проблема в том, что я могу связать только один столбец, и я хочу иметь два.Я не хочу использовать два ярлыка для этого (один для отображения имени, а другой для отображения фамилии).
Итак, каково решение моей проблемы?
Кроме того, у меня есть одинВопрос, связанный с выбором данных в ComboBox.Теперь, когда я набираю что-то в поле со списком, это позволяет мне печатать буквы, которых нет в списке.Например, я начинаю набирать «J» и вместо окончания «D», чтобы у меня было «JD», я набираю «Jsomerandomtexthere».Combobox позволит это, но такого элемента нет в списке.Другими словами, я хочу, чтобы выпадающий список не позволял пользователю вводить код, которого нет в списке кодов.