Nick
Nick

Reputation: 51

Difficulty retrieving text in TextBox upon selecting an ID in ComboBox

Upon selecting a Question ID in the combo box the relating question should then appear in the text box. I am unsure how to get this to work though. I receive an error "Value of type......cannot be converted to string" on retrieveQuestion(). Any help is appreciated, thankyou.

Private Sub cmbQuestion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbQuestion.SelectedIndexChanged

            txtExistingQuestion.Text = retrieveQuestion() 'Add question, relevant to Question ID, to text box, DO I NEED .ToString?????????????????      
            loaded = True

        End Sub

        Public Function retrieveQuestion() As List(Of Question) 'Retrieves selected question into text box

            Dim typeList As New List(Of Question)
            Dim Str As String = "SELECT Question_ID, Question_Text FROM Question WHERE Question_ID =" & cmbQuestion.SelectedValue
            Try
                Using conn As New SqlClient.SqlConnection(DBConnection)
                    conn.Open()
                    Using cmdQuery As New SqlClient.SqlCommand(Str, conn)
                        Using drResult As SqlClient.SqlDataReader = cmdQuery.ExecuteReader()
                            While drResult.Read
                                typeList.Add(New Question(drResult("Question_ID"), drResult("Question_Text")))
                            End While
                        End Using 'Automatically closes connection
                    End Using
                End Using

            Catch ex As Exception

                MsgBox("Question List Exception: " & ex.Message & vbNewLine & Str)

            End Try

            Return typeList

        End Function

    Public Class Question 'defining one club within class
            Public Sub New(ByVal questionID As Integer, ByVal questionText As String)

                mQuestionID = questionID 'm is for member of the class
                mQuestionText = questionText

            End Sub

            Private mQuestionID As String = ""
            Private mQuestionText As String = ""

            Public Property QuestionID() As String
                Get
                    Return mQuestionID
                End Get
                Set(ByVal value As String)
                    mQuestionID = value
                End Set
            End Property

            Public Property QuestionText() As String
                Get
                    Return mQuestionText
                End Get
                Set(ByVal value As String)
                    mQuestionText = value
                End Set
            End Property
        End Class

Upvotes: 0

Views: 214

Answers (2)

Steve
Steve

Reputation: 216293

Your error is originated by the return value of retrieveQuestion declared as a List(Of Question) but then you try to set the text property of a TextBox (and there is no way to convert automatically a List(Of Question) to a string)

So you could write something like this to extract the text of the first question in the list

  Dim qList = retrieveQuestion()
  if qList.Count > 0 then
       txtExistingQuestion.Text = qList(0).QuestionText
       loaded = True
  End If

Of course, if your query returns zero or just one question, then there is no need to return a List(Of Question) and you can change the retrieveQuestion method to return just a Question or Nothing

Public Function retrieveQuestion() As Question

      Dim questionResult As Question = Nothing
      ......

      Using drResult As SqlClient.SqlDataReader = cmdQuery.ExecuteReader()
            if drResult.Read() then
                questionResult = New Question(drResult("Question_ID"), _ 
                                     drResult("Question_Text")))
            End if
      End Using 
      ....

      return questionResult
End Function


  Dim question = retrieveQuestion()
  if question IsNot Nothing then
       txtExistingQuestion.Text = question.QuestionText
       loaded = True
  End If

However, all the comments about string and integer conversion happening automatically on your code are really an alarm bell. You should strive to avoid this kind of conversion because they render your code weak and prone to misterious errors. Switch to Option Strinct On on your project properties and prepare yourself to a lot of conversion fixing.

Upvotes: 1

Karl Anderson
Karl Anderson

Reputation: 34846

Your issue is this line:

mQuestionID = questionID

In your class you have defined this:

Private mQuestionID As String = ""

But in your constructor, you are saying that questionID should be an Integer, like this:

Public Sub New(ByVal questionID As Integer, ByVal questionText As String)

You need to change your backing variable in your class (mQuestionID) to be an Integer, like this:

Private mQuestionID As Integer

This will also necessitate a change to the property syntax for QuestionID, like this:

Public Property QuestionID() As Integer
    Get
        Return mQuestionID
    End Get
    Set(ByVal value As Integer)
        mQuestionID = value
    End Set
End Property

Upvotes: 1

Related Questions