Лучший отвечающий
Данные SQL из Combobox в Textbox

Вопрос
-
Добрый день. Надеюсь хоть вы мне поможете. У меня есть приложение с базой данных (ЛОКАЛЬНАЯ БД!!!). В правой части я заполняю данные. И добавляю их в базу данных, которая затем отображает эти данные в comboBox. Но как потом выбирая данные из comboBox отправить их обратно в textBox'ы, которые расположены в левой части приложения?
Этот вариант кода возвращает только одну строчку данных. Но а если их две, то все равно отображается только первая
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { SqlCeCommand cmd = new SqlCeCommand("Select Name,Surname, Phone, Mail, Address from Persons", cn); cmd.Parameters.AddWithValue("@Name", comboBox1.Text); cmd.Parameters.AddWithValue("@Surname", comboBox1.Text); cmd.Parameters.AddWithValue("@Phone", comboBox1.Text); cmd.Parameters.AddWithValue("@Mail", comboBox1.Text); cmd.Parameters.AddWithValue("@Address", comboBox1.Text); cn.Open(); SqlCeDataReader read = cmd.ExecuteReader(); if (read.Read()) { textBox2.Text = Convert.ToString(read[0]); textBox3.Text = Convert.ToString(read[1]); textBox4.Text = Convert.ToString(read[2]); textBox5.Text = Convert.ToString(read[3]); textBox6.Text = Convert.ToString(read[4]); } cn.Close(); }
Это видео мне тоже не помогло Видео
- Изменено Marcel Bagautdinov 26 октября 2014 г. 13:32 Ошибочная ссылка
26 октября 2014 г. 13:28
Ответы
-
Ну вот, все правильно, вы ComboBox не настроили. Посмотрите что такое SelectedValue. Ну и настройте корректно ValueMember. По второй ссылке весьма недурственный пример.
- Помечено в качестве ответа Marcel Bagautdinov 27 октября 2014 г. 11:15
- Снята пометка об ответе Marcel Bagautdinov 27 октября 2014 г. 13:33
- Помечено в качестве ответа Marcel Bagautdinov 28 октября 2014 г. 9:04
27 октября 2014 г. 9:28Отвечающий
Все ответы
-
Добрый день.
Если у вас в ComboBox данные грузятся целиком строкой из БД, то я бы показывая ФИО, искал бы по первичному ключу. Т.е. в ComboBox выбирают человека, вы модифицируете запрос вот так:
SqlCeCommand cmd = new SqlCeCommand("Select Name,Surname, Phone, Mail, Address from Persons where uid = @uid", cn); cmd.Parameters.AddWithValue("@uid", comboBox1.SelectedValue);
В этом случае у вас будет считана из базы только одна строка.
И, да, не надо добавлять возвращаемые столбцы в качестве параметров при Select-е.
- Помечено в качестве ответа Алексей ЛосевEditor 27 октября 2014 г. 11:37
- Снята пометка об ответе Marcel Bagautdinov 27 октября 2014 г. 14:16
27 октября 2014 г. 6:35Отвечающий -
Сделал, как Вы описали, но выдало ошибку
Вот код
private void comboBox1_DropDownClosed(object sender, EventArgs e) { try { SqlCeCommand cmd = new SqlCeCommand("Select Name,Surname, Phone, Mail, Address, Pics from Persons where uid=@uid", cn); cmd.Parameters.AddWithValue("@uid", comboBox1.SelectedValue); cn.Open(); SqlCeDataReader read = cmd.ExecuteReader(); if (read.Read()) { textBox2.Text = Convert.ToString(read[0]); textBox3.Text = Convert.ToString(read[1]); textBox4.Text = Convert.ToString(read[2]); textBox5.Text = Convert.ToString(read[3]); textBox6.Text = Convert.ToString(read[4]); imgData = (byte[])(read["Pics"]); if (imgData == null) pictureBox1.Image = null; else { MemoryStream stream = new MemoryStream(imgData); pictureBox1.Image = System.Drawing.Image.FromStream(stream); } } cn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
вот таблица БД
и кстати после удаления строк, нумерация uid идет не сначала
27 октября 2014 г. 8:10 -
Странно, вроде все правильно, ну попробуйте вот так:
SqlCeCommand cmd = new SqlCeCommand("Select Name,Surname, Phone, Mail, Address, Pics from Persons where uid=" + comboBox1.SelectedValue, cn);
И, кстати, вы настроили ComboBox, какой столбец использовать в качестве Value?27 октября 2014 г. 8:37Отвечающий -
Так ошибки нет, но данные текстбоксов пустые. Я могу переслать проект для удобства. Только сделаю БД транспортабельную =)27 октября 2014 г. 8:58
-
И, кстати, вы настроили ComboBox, какой столбец использовать в качестве Value?
Вы вот это посмотрели?
Поставьте точку останова и проверьте что находится в SelectedValue
27 октября 2014 г. 9:02Отвечающий -
Первичный ключ у меня uid, до этого был Name. Результат тот же.
27 октября 2014 г. 9:16 -
Данные на точке останова в комбобоксе27 октября 2014 г. 9:23
-
Ну вот, все правильно, вы ComboBox не настроили. Посмотрите что такое SelectedValue. Ну и настройте корректно ValueMember. По второй ссылке весьма недурственный пример.
- Помечено в качестве ответа Marcel Bagautdinov 27 октября 2014 г. 11:15
- Снята пометка об ответе Marcel Bagautdinov 27 октября 2014 г. 13:33
- Помечено в качестве ответа Marcel Bagautdinov 28 октября 2014 г. 9:04
27 октября 2014 г. 9:28Отвечающий -
Это мне надо вернуться туда где данные с БД идут в комбобокс?
Вот его код
SqlCeCommand cmd = new SqlCeCommand( "Select Name, Surname from Persons", cn); SqlCeDataReader dr; try { cn.Open(); dr = cmd.ExecuteReader(); while (dr.Read()) { if (!comboBox1.Items.Contains(dr[1] + " " + dr[0])) comboBox1.Items.Add(dr[1] + " " + dr[0]); } cn.Close();
27 октября 2014 г. 9:46 -
Вы посмотрели пример? У меня есть ощущение, что нет. Посмотрите, создайте вспомогательный класс, в него пишите uid и ФИО, настройте ComboBox.
Кстати, а почему вы используете DataReader, почему не DataSet или EntityFramework?
- Помечено в качестве ответа Marcel Bagautdinov 27 октября 2014 г. 11:15
- Снята пометка об ответе Marcel Bagautdinov 27 октября 2014 г. 13:33
27 октября 2014 г. 9:55Отвечающий -
Я начал разбирать пример из видео сначала так по всему коду у меня и пошло27 октября 2014 г. 10:16
-
Пример смотрел. Не понял зачем там нужны {get;set}27 октября 2014 г. 10:29
-
Эти привязки работают со свойствами...
27 октября 2014 г. 10:30Отвечающий -
Ну сделал как в примере. Но при этом теперь у меня отображается только имя во всех полях текстбокса27 октября 2014 г. 10:53
-
Судя по картинке приведенной вами выше, у вас во всех столбцах одинаковые значения...
27 октября 2014 г. 10:55Отвечающий -
Разные. MyName, MySurname, MyPhone. И кстати отображается не имя а Фамилия почему-то, хотя в комбобоксе имя.
private void loadList() { string Querry = "Select Name, Surname from Persons"; SqlCeDataAdapter da = new SqlCeDataAdapter(Querry, cn); DataSet ds = new DataSet(); da.Fill(ds); comboBox1.DataSource = ds.Tables[0]; comboBox1.DisplayMember = "Name"; comboBox1.ValueMember = "Surname"; } private void comboBox1_SelectedValueChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { textBox2.Text = comboBox1.SelectedValue.ToString(); textBox3.Text = comboBox1.SelectedValue.ToString(); textBox4.Text = comboBox1.SelectedValue.ToString(); textBox5.Text = comboBox1.SelectedValue.ToString(); textBox6.Text = comboBox1.SelectedValue.ToString(); }
- Изменено Marcel Bagautdinov 27 октября 2014 г. 11:01
27 октября 2014 г. 10:57 -
Ага, а значения в них совпадают...27 октября 2014 г. 10:58Отвечающий
-
Еще раз, в ValueMember необходимо помещать UID, при изменении выбранного элемента лезть по этому UID в базу (как я показывал выше) и выбирать остальные поля по записи и показывать их.28 октября 2014 г. 6:56Отвечающий