Выберите значение из ComboBox и отобразите его детали в текстовом поле.

У меня возникла проблема с отображением сведений о продукте из двух таблиц.

Я использую VS 2010 и базу данных MS Access.

Моя структура таблицы базы данных выглядит следующим образом:

  • Продукт (#Product_ID, Category_ID, Product_Name, Product_Cost, Product_Price)

  • Категория (#Category_ID, Category_Name)

Я хочу отображать ProductCost, ProductPrice и CategoryName в текстовом поле, когда я выбираю ProductName из поля со списком. Я могу отобразить ProductCost и ProductPrice, но не могу отобразить CategoryName, потому что не знаю, как связать эти две таблицы вместе.

Код, который я использую для заполнения Combobox ProductName:

Public Sub fillProductCombobox(ByVal sender As Object)
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
    Try
        conn.Open()
        da.SelectCommand = New OleDbCommand("SELECT * FROM Product", conn)
        da.Fill(dt)
        sender.DataSource = dt
        sender.DisplayMember = "Product_Name"
        sender.ValueMember = "Product_ID"

        'best method?
        frmAddSalesProduct.txtProductCost.DataBindings.Add("Text", dt, "Product_Cost")
        frmAddSalesProduct.txtPerPrice.DataBindings.Add("Text", dt, "Product_Price")
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        conn.Close()
    End Try
End Sub

Затем я вызываю функцию таким образом при загрузке формы:

fillProductCombobox(ProductComboBox)

Вот как выглядит моя форма: Пример формы

Подскажите, пожалуйста, как отобразить CategoryName.

Также является ли способ, которым я использую, чтобы заполнить Product_Cost и Product_Price лучший метод?

P/S: По какой-то причине мне нужно, чтобы все делалось динамически


person Milo Khoo    schedule 17.06.2013    source источник
comment
В вашей структуре указано ProductID, но вы привязаны к Product_ID.   -  person LarsTech    schedule 17.06.2013
comment
Ах, извините, это Product_ID. Я ошибся здесь :) Сделал правку.   -  person Milo Khoo    schedule 17.06.2013


Ответы (1)


Вы можете использовать запрос на соединение, например

 SELECT Product_ID, p.Category_ID, Product_Name, Product_Cost, Product_Price, Category_Name
 FROM Product p
 INNER JOIN Category c ON p.Category_ID = c.Category_ID

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

Я надеюсь, что это поможет вам. :)

person Hitesh    schedule 17.06.2013
comment
Спасибо, сэр! Раньше я никогда не думал о присоединении к запросу, всегда использовал только INSERT, DELETE и SELECT. Это действительно мне очень помогает! Спасибо! :) - person Milo Khoo; 17.06.2013