hjh93
hjh93

Reputation: 570

VB Net - How to get cascading drop down list to select self insert row without error?

I have 4 dropdownlist in my web form that is cascading, the value of the 1st dropdownlist will affect the selection of the 2nd dropdownlist and so on.

Protected Sub line_selectedindexchanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim level1_ID As Integer = Convert.ToInt32(line.SelectedValue.ToString())
    FillProcess(level1_ID)

End Sub

Protected Sub ddlprocess_selectedindexchanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim level2_ID As Integer = Convert.ToInt32(ddlprocess.SelectedValue.ToString())
    FillEquipment(level2_ID)

End Sub

Protected Sub equipment_selectedindexchanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim level3_ID As Integer = Convert.ToInt32(equipment.SelectedValue.ToString())
    FillStep(level3_ID)

End Sub

Private Sub FillLine() '1st dropdown

    Dim dt As New DataTable
    Dim strSql = "select distinct level1_id, [LCODE1]+ ' | '+[LNAME1] as [LCODE1]" _
                      & " FROM [SQLIOT].[dbo].[ZVIEW_MCM_LEVEL_LOOKUP]"
    Using conn As New SqlConnection(ConStr),
        cmd As New SqlCommand(strSql, conn)
        conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    If dt.Rows.Count > 0 Then
        line.DataSource = dt
        line.DataTextField = "LCODE1"
        line.DataValueField = "level1_id"
        line.DataBind()
        line.Items.Insert(0, "")
    End If

End Sub

Private Sub FillProcess(ByVal level1_ID As Integer) '2nd dropdown

    Dim dt As New DataTable
    Dim strSql = "select distinct level2_id, [LCODE2]+ ' | '+[LNAME2] as [LCODE2] " _
                  & "FROM [SQLIOT].[dbo].[ZVIEW_MCM_LEVEL_LOOKUP] where level1_id = @level1_id"
    Using conn As New SqlConnection(ConStr),
        cmd As New SqlCommand(strSql, conn)
        cmd.Parameters.Add("@level1_id", SqlDbType.Int).Value = level1_ID
        conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    If dt.Rows.Count > 0 Then
        ddlprocess.DataSource = dt
        ddlprocess.DataTextField = "LCODE2"
        ddlprocess.DataValueField = "level2_id"
        ddlprocess.DataBind()
        ddlprocess.Items.Insert(0, "")
    End If

End Sub

Private Sub FillEquipment(ByVal level2_ID As Integer) '3rd dropdown

    Dim dt As New DataTable
    Dim strSql = "select distinct level3_id, [LCODE3]+ ' | '+[LNAME3] as [LCODE3] " _
                 & "FROM [SQLIOT].[dbo].[ZVIEW_MCM_LEVEL_LOOKUP] where level2_id = @level2_id"
    Using conn As New SqlConnection(ConStr),
        cmd As New SqlCommand(strSql, conn)
        cmd.Parameters.Add("@level2_id", SqlDbType.Int).Value = level2_ID
        conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    If dt.Rows.Count > 0 Then
        equipment.DataSource = dt
        equipment.DataTextField = "LCODE3"
        equipment.DataValueField = "level3_id"
        equipment.DataBind()
        equipment.Items.Insert(0, "")
    End If

End Sub

Private Sub FillStep(ByVal level3_ID As Integer) '4th dropdown

    Dim dt As New DataTable
    Dim strSql = "select distinct [LCODE4]+ ' | '+[LNAME4] as [LCODE4] " _
                 & "FROM [SQLIOT].[dbo].[ZVIEW_MCM_LEVEL_LOOKUP] where level3_id = @level3_id"
    Using conn As New SqlConnection(ConStr),
        cmd As New SqlCommand(strSql, conn)
        cmd.Parameters.Add("@level3_id", SqlDbType.Int).Value = level3_ID
        conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    If dt.Rows.Count > 0 Then
        [step].DataSource = dt
        [step].DataTextField = "LCODE4"
        [step].DataBind()
        [step].Items.Insert(0, "")
    End If

End Sub

The reason I want a blank 1st row is so that when the form loads I want all dropdownlist to start off empty. During testing I thought to try selecting back to blank 1st row after selecting a value. This causes an error to occur at:

'Any one of the selectedindexchanged sub depending on which list I used
Protected Sub line_selectedindexchanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim level1_ID As Integer = Convert.ToInt32(line.SelectedValue.ToString()) '--> issue here
    FillProcess(level1_ID)

End Sub

Error message being:

Input string was not in a correct format.

Anything I can do to fix this?

Upvotes: 0

Views: 64

Answers (0)

Related Questions