Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два combobox. Привязка к данным. Два combobox. Привязка к данным. 
:(
    Опции темы
eon
Дата 23.11.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



VS08C# SQLServer08
Есть два combobox.
Первый заполняется при загрузке формы из таблицы naimenovanie:
Код

string connectionString = "Data Source=blablabla;Initial Catalog=req;Persist Security Info=True; Integrated Security = true";
            SqlConnection con = new SqlConnection(connectionString);
            string command = "SELECT * FROM naimenovanie ORDER BY ord";
            SqlDataAdapter da = new SqlDataAdapter(command, con);
            DataSet ds = new DataSet();
            con.Open();
            da.Fill(ds);
            con.Close();
            comboBox1.DataSource = ds.Tables[0];
            comboBox1.DisplayMember = "naimenovanie_name";
            comboBox1.ValueMember = "id";
            comboBox1.SelectedIndex = 0;

Второй в зависимости от того, что выбрано в первом, загружает данные из таблицы utochnenie при событии comboBox1_SelectedIndexChanged:
Код

string connectionString = "Data Source=blablabla;Initial Catalog=req;Persist Security Info=True; Integrated Security = true";
            SqlConnection con = new SqlConnection(connectionString);
            string command = "SELECT * FROM utochnenie WHERE naimenovanie_id=" + (comboBox1.SelectedIndex+1) + " ORDER BY ord ";
            SqlDataAdapter da = new SqlDataAdapter(command, con);
            DataSet ds = new DataSet();
            con.Open();
            da.Fill(ds);
            con.Close();
            comboBox2.DataSource = ds.Tables[0];
            comboBox2.DisplayMember = "utochnenie_name";
            comboBox2.ValueMember = "id";

Таблицы naimenovanie и utochnenie связаны по полю naimenovanie_id в таблице utochnenie.
Строка
Код

string command = "SELECT * FROM utochnenie WHERE naimenovanie_id=" + (comboBox1.SelectedIndex+1) + " ORDER BY ord ";

неверная, хотя работает.
Вопрос:как изменить SELECT, чтобы выбиралось:
"SLECET * FROM utochnenie WHERE naimenovanie_id = <ИД НАИМЕНОВАНИЯ ВЫБРАННОГО В ПЕРВОМ КОМБОБОКСЕ> ORDER BY ord"

Спасибо.

Это сообщение отредактировал(а) eon - 23.11.2010, 14:25
PM MAIL   Вверх
A5uKa
  Дата 23.11.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



ComboBox1.SelectedItem.Value.ToString()
PM   Вверх
Freyzer
Дата 23.11.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


обаятельный нахал
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 12.12.2009
Где: на Марсе

Репутация: нет
Всего: 1



Может тут что поможет http://www.google.ru/search?ie=UTF-8&h...ZJYbBswaarcX2Dg


--------------------
Advocatus Dei smile. Advocatus Diaboli smileAjo!   
PM MAIL   Вверх
eon
Дата 23.11.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Цитата(A5uKa @ 23.11.2010,  14:45)
ComboBox1.SelectedItem.Value.ToString()

Не идет :(
PM MAIL   Вверх
eon
Дата 23.11.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Код

string command = "SELECT * FROM utochnenie WHERE naimenovanie_id = (SELECT id FROM naimenovanie WHERE naimenovanie_name = '" + (comboBox1.SelectedText) + "') ORDER BY ord ";


Это то что нужно.
Но почему-то после comboBox1.SelectedIndex = 0; comboBox1.SelectedText остается пустым. Кто-нибудь знает, почему?
PM MAIL   Вверх
A5uKa
  Дата 23.11.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Цитата(eon @ 23.11.2010,  15:32)
Код

string command = "SELECT * FROM utochnenie WHERE naimenovanie_id = (SELECT id FROM naimenovanie WHERE naimenovanie_name = '" + (comboBox1.SelectedText) + "') ORDER BY ord ";


Это то что нужно.
Но почему-то после comboBox1.SelectedIndex = 0; comboBox1.SelectedText остается пустым. Кто-нибудь знает, почему?

Я не понимаю что надо тогда ... Задай вопрос более конкретно, а то куски непонятно чего везде и что из этого не работает и как работать должно я не понимаю.

Пустым остаётся скорее всего из-за того, что ты PostBack не делаешь. 
PM   Вверх
eon
Дата 23.11.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



От первоначального вопроса уже перешел к следующему:
Заполнил комбобокс данными программно из таблицы БД. При событии comboBox1_SelectedIndexChanged смотрю comboBox1.SelectedIndex - отображается правильно (ну если выбрал третью строку в комбобоксе то и будет comboBox1.SelectedIndex = 2), а вот comboBox1.SelectedText и comboBox1.SelectedItem as string остаются пустыми, хотя третья строка в комбобоксе не пустая естественно.

Проект WinForms, а не ASP.NET. это по поводу postback'a.
PM MAIL   Вверх
neic
Дата 23.11.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



eon
comboBox1.SelectedText  замени на comboBox1.Text 

Старое (оставил может пригодиться):
Как я понял:

У нас есть:
1 БД
2 Комобобокса

Первый комбобокс подгружает данные из БД и содержит в себе список наименований чего-то.

Нужно:
Чтобы при выборе в первом кобобоксе какого-либо пункта: считался номер строки (он же видимо ID) и подгружались данные из БД?

Если я прав, то:

Во-первых: в первом комбобоксе сделай событие comboBox1.SelectedIndex (или TextChanged) и туда перемести код заполнения второго.

Во-вторых:
            string t = comboBox1.Text; //возвращаем выбранную строку, т.е. если у нас строка с индексом три = Привет, то будет t="Привет".

            int i = comboBox1.SelectedIndex; //собственно выбранная строка

В-третьих: запрос для заполнения второго будет таков:
если SelectedIndex является ID:
"SLECET * FROM utochnenie WHERE naimenovanie_id ="+ comboBox1.SelectedIndex + " ORDER BY ord"

если Text является ID:
"SLECET * FROM utochnenie WHERE naimenovanie_id ="+ Convert.ToInt32(comboBox1.Text) + " ORDER BY ord"
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 23.11.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



В аттаче пример как это делать, без всяких запросов можно сделать.. используя биндинг и DataSet например

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  WindowsFormsApplication10.rar 18,49 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
neic
Дата 23.11.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



jonie
Кстати да, через мастера можно было бы все настроить =)
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 23.11.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



neic, ну в своем примере я не делал релейшена, хотя он тут уместен. Я показал как именно получить id выбранный и выбрать по нему записи


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
eon
Дата 24.11.2010, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Цитата(neic @ 23.11.2010,  16:32)
eon
comboBox1.SelectedText  замени на comboBox1.Text 

Старое (оставил может пригодиться):
Как я понял:

У нас есть:
1 БД
2 Комобобокса

Первый комбобокс подгружает данные из БД и содержит в себе список наименований чего-то.

Нужно:
Чтобы при выборе в первом кобобоксе какого-либо пункта: считался номер строки (он же видимо ID) и подгружались данные из БД?

Если я прав, то:

Во-первых: в первом комбобоксе сделай событие comboBox1.SelectedIndex (или TextChanged) и туда перемести код заполнения второго.

Во-вторых:
            string t = comboBox1.Text; //возвращаем выбранную строку, т.е. если у нас строка с индексом три = Привет, то будет t="Привет".

            int i = comboBox1.SelectedIndex; //собственно выбранная строка

В-третьих: запрос для заполнения второго будет таков:
если SelectedIndex является ID:
"SLECET * FROM utochnenie WHERE naimenovanie_id ="+ comboBox1.SelectedIndex + " ORDER BY ord"

если Text является ID:
"SLECET * FROM utochnenie WHERE naimenovanie_id ="+ Convert.ToInt32(comboBox1.Text) + " ORDER BY ord"

Спасибо за равернутый ответ.
НО..
ID  в бд и порядок следования в combobox1 не обязательно совпадают.
Сделал замену на comboBox1.Text, всё работает хорошо, но только если вручную поменял я выбранный пункт в combobox1.
То есть у меня в событии формы Form1_Load написано

Код

comboBox1.SelectedIndex = 0;

Вроде после этой строки должно вызваться событие
Код

comboBox1_SelectedIndexChanged

А оно почему-то не вызывается.
Оно вызывается когда я уже сам вручную поменяю на форме выбранный пункт в combobox1.
PM MAIL   Вверх
eon
Дата 24.11.2010, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Всем спасибо. Проблему решил.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.