2017-02-02 1 views
1

У меня есть окно со списком окон, которое динамически заполняется из базы данных.Как автоматически заполнять несколько текстовых полей на основе выбранного окна Windows Combo?

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

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

Любые идеи, что я делаю неправильно?

Imports System.Data.SqlClient 

Public Class Form1 
    Dim conString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myDB;Integrated Security=True;;MultipleActiveResultSets=True" 
    Dim con As New SqlConnection(conString) 
    Dim cmd As New SqlCommand() 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 

     con.Open() 
     cmd.Connection = con 
     cmd.CommandText = "SELECT locId, name FROM Places" 
     Dim adpt As New SqlDataAdapter(cmd) 
     Dim dsn As New DataSet() 
     adpt.Fill(dsn) 
     con.Close() 

     ComboBox1.DisplayMember = "name" 
     ComboBox1.ValueMember = "LocID" 
     ComboBox1.DataSource = dsn.Tables(0) 
    End Sub 


    Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
     Try 
      con.Open() 
      Dim req As String = "SELECT locId, name FROM Places where locID = @locId" 
      Dim com As New SqlCommand(req, con) 
      'MessageBox.Show(req) 
      cmd.Parameters.AddWithValue("@locId", Convert.ToInt32(ComboBox1.SelectedValue)) 
      Dim dr As SqlDataReader = com.ExecuteReader() 
      If dr.Read() Then 
       txtLocationID.Text = dr.GetValue(0) 
       txtLocation.Text = dr.GetValue(1).ToString() 
      End If 
     Catch ex As Exception 
      MessageBox.Show("No records found") 
     Finally 
      con.Close() 
     End Try 
    End Sub 
End Class 

ответ

0

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

Imports System.Data.SqlClient 

Public Class Form1 
    Dim conString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myDB;Integrated Security=True;;MultipleActiveResultSets=True" 
    Dim con As New SqlConnection(conString) 
    Dim cmd As New SqlCommand() 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 

     con.Open() 
     cmd.Connection = con 
     cmd.CommandText = "SELECT locId, name FROM Places" 
     Dim adpt As New SqlDataAdapter(cmd) 
     Dim dsn As New DataSet() 
     adpt.Fill(dsn) 
     con.Close() 

     ComboBox1.DisplayMember = "name" 
     ComboBox1.ValueMember = "LocID" 
     ComboBox1.DataSource = dsn.Tables(0) 
    End Sub 


    Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
     Try 
      con.Open() 
      Dim req As String = "SELECT locId, name FROM Places where locID = @locId" 
      Dim com As New SqlCommand(req, con) 

      com.Parameters.AddWithValue("@locId", Convert.ToInt32(ComboBox1.SelectedValue)) ' You supposed to add parameters to instance of `com` object ' 
      Dim dr As SqlDataReader = com.ExecuteReader() 
      While dr.Read 
       txtLocationID.Text = dr(0) 
       txtLocation.Text = dr(1) 
      End While 
     Catch ex As Exception 
      MessageBox.Show("No records found") 
     Finally 
      con.Close() 
     End Try 
    End Sub 
End Class 
+0

Такая же проблема. Не найдено записей – Tairoc

+0

Замените эту строку существующим при инициализации Data Reader Dim dr As SqlDataReader = com.ExecuteReader (Reader.CommandBehavior.CloseConnection) – hdkhardik

+0

Спасибо, но все же не повезло, извините – Tairoc

Смежные вопросы