Возьмите данные со списком SelectedIndex и используйте их в запросе SELECT - VB.net

Я немного отчаялся, поэтому я здесь! Я довольно новичок в программировании и получил задание, в котором мне нужно использовать диапазон SQL-запросов для генерации простой таблицы отчетов HTML. Существует также пользовательский ввод, при котором они выбирают ClinicID из поля со списком и нажимают кнопку для создания отчета.

По сути, у меня есть комбинированный список, который я заполнил "ClinicID", как показано ниже. Я также убедился, что SelectedIndex работает. Мне нужно как-то использовать это в методе SQL-запроса, который я также предоставил ниже.

Public Class frmReport1
'Set lsData for Clinics table
Dim lsData As List(Of Hashtable)


'On form load
Private Sub frmReport1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    cboClinicID.DropDownStyle = ComboBoxStyle.DropDownList

    'Instantiate new ClinicController object
    Dim cController As ClinicController = New ClinicController

    'Load ClinicID
    lsData = cController.findId()

    For Each clinic In lsData
        cboClinicID.Items.Add(CStr(clinic("ClinicID")))
    Next

End Sub

'Selected Index 
Private Sub cboClinicID_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboClinicID.SelectedIndexChanged
    Dim selectedIndex As Integer = cboClinicID.SelectedIndex
    Dim selectedItem As Object = cboClinicID.SelectedItem

    'Print in debug window
    Debug.Print("Selected clinicID: " & selectedItem.ToString())
    Debug.Print("Selected clinicID index: " & selectedIndex.ToString())

    Dim htData = lsData.Item(selectedIndex)


End Sub

Метод SQL-запроса - ** обратите внимание, я извлекаю из двух разных таблиц:

Где '?' где я должен работать в SelectedItem, но понятия не имею, как!

Желаемый результат: HTML-таблица, выведенная с этими тремя выбранными полями.

Public Class ClinicOrderController

Public Const CONNECTION_STRING As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PharmDB.accdb"

'Dim cController As ClinicController = New ClinicController
'Dim oController As OrderController = New OrderController

Public Function findClinicOrder() As List(Of Hashtable)

    'Instantiates a connection object
    Dim oConnection As OleDbConnection = New OleDbConnection(CONNECTION_STRING)
    'Instantiates a list of hashtables
    Dim lsData As New List(Of Hashtable)

    Try
        Debug.Print("Connection string: " & oConnection.ConnectionString)

        oConnection.Open()
        Dim oCommand As OleDbCommand = New OleDbCommand
        oCommand.Connection = oConnection

        'Stored in the CommandText property of the command object
        'SELECT SQL statement
        oCommand.CommandText = "SELECT clinics.clinic_id, orders.date_ordered, orders.total_price FROM clinics, orders WHERE clinics.clinic_id = orders.clinic_id AND clinics.clinic_id = ? ORDER BY clinics.clinic_id"

        'Compiles the prepared statement
        'oCommand.Prepare()
        'Executes the SQL statement and stores the results in data reader object
        Dim oDataReader = oCommand.ExecuteReader()

        'Process data set in Hashtable
        Dim htTempData As Hashtable
        Do While oDataReader.Read() = True
            htTempData = New Hashtable
            htTempData("ClinicID") = CStr(oDataReader("clinic_id"))
            htTempData("DateOrdered") = CStr(oDataReader("date_ordered"))
            htTempData("OrderTotalPrice") = CStr(oDataReader("total_price"))
            lsData.Add(htTempData)

        Loop

        Debug.Print("The record was found.")

    Catch ex As Exception
        Debug.Print("ERROR:" & ex.Message)
        MsgBox("An error occured!")
    Finally
        oConnection.Close()
    End Try

    'Return list of hashtables to the calling function
    Return lsData

End Function

Действительно, очень ценю любую помощь здесь. Я боролся с этим более 8 часов (не шучу - я разрешаю тебе смеяться)

3 ответа

Если я вас правильно понимаю, вы хотите использовать свой dropdown выбранный элемент в вашем WHERE пункт. Чтобы добиться этого, пересмотрите свое присоединение, используя INNER JOIN с ON затем поместите свою фильтрацию в WHERE состояние. Надеюсь, что приведенный ниже код поможет.

    SELECT clinics.clinic_id,
      , orders.date_ordered
      , orders.total_price 
    FROM clinics INNER JOIN orders ON clinics.clinic_id = orders.clinic_id
    WHERE clinics.clinic_id = selectedItem.ToString()
    ORDER BY clinics.clinic_id

если selectedItem.ToString() не работает, вы можете попробовать SelectedValue

Предполагая, что clinic_id является числовым полем в базе данных: (в противном случае просто заключите его в одинарные кавычки (''))

string clinicID = cboClinicID.SelectedItem.ToString();
string sql = string.Format(@"SELECT clinics.clinic_id, orders.date_ordered, orders.total_price
                             FROM clinics, orders
                             WHERE clinics.clinic_id = orders.clinic_id
                             AND clinics.clinic_id = {0}
                             ORDER BY clinics.clinic_id", clinicID);

oCommand.CommandText = sql;

Вы также можете сделать это так:

string sql = "SELECT clinics.clinic_id, orders.date_ordered, orders.total_price " +
             "FROM clinics, orders " +
             "WHERE clinics.clinic_id = orders.clinic_id " +
             "AND clinics.clinic_id = " + clinicID + " " +
             "ORDER BY clinics.clinic_id";

Пожалуйста, предоставьте код в vb.net

Вот мой код, я хочу отобразить сумму выигрыша из таблицы, где class id это условие:

Если class id 3, то приз за это отображается в моем текстовом поле с именем txtprize.text а также class Id отображается в списке.

Private Sub listClassID_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles listClassID.SelectedIndexChanged
Dim classIdlist As String
classIdlist = New String(listClassID.SelectedItem.ToString)
Dim strSQL As String = "select [Prize Amount] from Master_Class WHERE [Class ID]  =" & classIdlist
Dim dr As SqlDataReader

Try
    con.Open()
    cmd = New SqlCommand(strSQL, con)
    dr = cmd.ExecuteReader()
    If dr.Item(0) Then
        txtPrize.Text = dr("[Prize Amount]").ToString
    End If

    dr.Close()
    cmd.Dispose()
    con.Close()

Catch ex As Exception
    MsgBox(ex.Message)
    con.Close()
End Try
End Sub
Другие вопросы по тегам