2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 45
1

Как при выборе в ComboBox, привязанному к столбцу БД, получить значения других полей

03.10.2014, 15:40. Показов 2293. Ответов 14
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане!
Впал в ступор вот с какой проблемой:
Есть таблица полученная из запроса к БД с тремя столбцами (id, fullname, password).
далее она прилеплена к combobox
VB.NET
1
2
3
ChangeUser.DataSource = userTable
ChangeUser.DisplayMember = "fullname"
ChangeUser.ValueMember = "id"
Но впал в ступор как получить значения password выбранного значения combobox. id получил следующим образом:
VB.NET
1
Me.ChangeUser.SelectedValue
Заранее благодарен за любые советы!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2014, 15:40
Ответы с готовыми решениями:

Изменение текста элементов привязанному к данным ComboBox без изменения его значения
Собственно по теме, есть форма в которой расположен combobox- где значения берутся из БД...

C# Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Приветствую коллеги. Только встал на путь программирования и столкнулся с дилеммой. Есть форма,...

Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Есть два combobox. Как их сделать зависимыми друг от друга. Что бы при выборе одного combobox...

Как сделать чтобы при выборе в combobox , менялись значения в других combobox? Visual Basic 6.0
Есть несколько компонентов Combobox, списки через Form_load я прописал, теперь списки отображаются....

14
Почетный модератор
21308 / 9042 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
03.10.2014, 16:42 2
Наверняка это костыль, но попробуйте
VB.NET
1
2
3
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
          MsgBox(tbl.Rows(ComboBox1.SelectedIndex)("password"))
    End Sub
1
2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 45
03.10.2014, 17:44  [ТС] 3
К сожалению данный подход не дал результатов.

Появилась идея присвоить полю id primarykey.
Далее поcредством свойства .Rows.Find получить одну строку
И уже из нее получить значение password.
Однако данный подход застопорился на этапе присвоения ключа ошибкой на 4 строке листинга:
Невозможно преобразовать значение типа "System.Data.DataColumn" в "1-мерный массив из System.Data.DataColumn".
VB.NET
1
2
3
4
        Dim uColName As DataColumn
        uColName = userTable.Columns("id")
        uColName.Unique = True
        userTable.PrimaryKey = uColName
0
Почетный модератор
21308 / 9042 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
03.10.2014, 18:13 4
Trigun68, результаты он дает, у меня выдает что нужно. Но я пробовал на БД Access, какая БД у Вас - мне неизвестно.
VB.NET
1
MsgBox(tbl.Rows(ComboBox1.SelectedIndex)("password"))
Тут в кавычках у меня имя поля. Можно поставить индекс поля вместо имени (индекс начинается с нуля)
0
355 / 294 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
03.10.2014, 18:34 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VB.NET
1
2
3
Dim PrimaryKey(0) as DataColumn
PrimaryKey(0) = userTable.Columns("id")
userTable.PrimaryKey = PrimaryKey
Получаем значение поля:
VB.NET
1
2
dim dRow as DataRow= userTable.Rows.Find(ComboBox1.SelectedIndex)
MsgBox(userTable.Rows("password").toString
3
2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 45
03.10.2014, 19:41  [ТС] 6
Памирыч, у меня Visual Studio и подключение к MySQL.
dimsaratov, спасибо.
Вот только логику никак не пойму второго блока кода.
в первой строке выбираем строку и пишем в новое поле. а во второй строке опять терзаем таблицу и ищем строку с именем столбца.
0
355 / 294 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
03.10.2014, 20:00 7
Странно вроде писал одно, а на форуме другое вот так должно быть:
VB.NET
1
2
 Dim dRow as DataRow =userTable. Rows .Find (ComboBox1.SelectedValue )
MsgBox (dRows ("password" ).toString)
логика в том что сколько колонок к ComboBox не подключай в нем используется (доступно) только 2

Добавлено через 7 минут
SelectedIndex вернет порядковый номер начиная с 0 выбранной записи который может!! не совпасть с Id
а SelectedValue вернет имеено ID
далее в таблице мы ищем не строку с именем столбца с строку с PrimaryKey =Id
После этого из этой строки мы можем получить значение любого поля
0
Почетный модератор
21308 / 9042 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
03.10.2014, 20:00 8
Цитата Сообщение от dimsaratov Посмотреть сообщение
Странно вроде писал одно, а на форуме другое
Сравнивая Ваши посты, пришел к выводу, что этого не может быть)

dimsaratov, Вы как человек с опытом работы с БД, не могли бы пояснить, в чем ошибка моего подхода? Просто интересно
0
355 / 294 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
03.10.2014, 20:06 9
Памирыч
SelectedIndex может не совпасть с ID
0
Почетный модератор
21308 / 9042 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
03.10.2014, 20:16 10
Цитата Сообщение от dimsaratov Посмотреть сообщение
SelectedIndex может не совпасть с ID
А он и не должен с ним совпадать

Добавлено через 40 секунд
Хотя я сейчас лучше проверю
0
355 / 294 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
03.10.2014, 20:21 11
В combobox нумерация идет с нуля а в БД id очень редко кто делает с нуля
Опять же если запись будет удалена нумерация точно не будет совпадать
0
Почетный модератор
21308 / 9042 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
03.10.2014, 20:24 12
dimsaratov, смотрите:
Загрузка формы
VB.NET
1
2
3
4
5
6
7
8
9
10
11
    Dim cn As OleDb.OleDbConnection
    Dim tbl As New DataTable
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\1.mdb")
        cn.Open()
        da.SelectCommand = New OleDb.OleDbCommand("Select * from Таблица2", cn)
        da.Fill(tbl)
        ComboBox1.DataSource = tbl
        ComboBox1.DisplayMember = "Поле3"
    End Sub
Событие выбора
VB.NET
1
2
3
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        MsgBox(tbl.Rows(ComboBox1.SelectedIndex)("Поле5"))
    End Sub
Структура таблицы
Как при выборе в ComboBox, привязанному к столбцу БД, получить значения других полей


Что выбираю в комбо - то и вижу, но из другого поля. Например, в комбо выбираю "Три", в сообщении - "Третий", выбираю "Шесть" - в сообщении "Шестой"
ЧЯДНТ?
0
355 / 294 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
03.10.2014, 20:45 13
Поле 3—Поле 5
в событии выбора

в частности такой подход имеет право быть но перспективно это может стать источником ошибок

Добавлено через 10 минут
Не много не в тему но хранить password в базе данных большое ФФИИИ
0
Памирыч
03.10.2014, 20:49
  #14

Не по теме:

Цитата Сообщение от dimsaratov Посмотреть сообщение
но перспективно это может стать источником ошибок
Вот я и засомневался. Мало ли какие ситуации могут возникнуть. Какие - не знаю, от того и спросил.

0
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
03.10.2014, 21:09 15
dimsaratov, используйте BindingSuurce
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2014, 21:09

При выборе значения в одном ComboBox меняются значения в других
Помогите, пожалуйста. Есть несколько ComboBox Выбирая значение в одном, почему-то...

При выборе определённого значения в одном из ComboBox-ов автоматически убирать лишние значения в других
Здравствуйте, подскажите как при выборе определённого значения в одном из combobox автоматически...

Фильтр в ComboBox, привязанному к столбцу БД
Здравствуйте! У меня есть СomboBox к нему привязывается значение столбца из таблицы с помощью...

Как при выборе значения в combobox получить его текст
На форме 7 Combobox все подключены к разным таблицам при помощи SQL-запросов. Нужно чтобы при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.