none
ListBox RRS feed

  • Pergunta

  • Estou carregando um listBox com um DataTable, porém ao vincular o DataSource do listBox é executado o evento SelectedIndexChanged antes de atribuir o DisplayMenber e o ValueMember.Isto está prococando um erro no evento SelectedIndexChanged, onde verifico se o SeletedIndex <> -1 é executado uma rotina.
    Eis os códigos:
    Private Sub listaObras()
      Dim conn As SqlConnection = New SqlConnection(My.Settings.conexaoCobra)
      conn.Open()
      Try
       Dim cmd As SqlCommand = New SqlCommand("spListaObra", conn)
       cmd.CommandType = CommandType.StoredProcedure
       cmd.Parameters.AddWithValue("@idCliente", CType(idCliente, Integer))
       Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
       Dim dt As DataTable = New DataTable
       da.Fill(dt)
       Me.lstObras.SelectedIndex = -1
       Me.lstObras.DataSource = dt
       Me.lstObras.DisplayMember = "nomeDaObra"
       Me.lstObras.ValueMember = "idObra"
    
      Catch ex As Exception
       MsgBox(ex.Message)
      Finally
       conn.Close()
      End Try
     End Sub
    
    Private Sub lstObras_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstObras.SelectedIndexChanged
      
      If Me.lstObras.SelectedIndex = -1 Then Exit Sub
      idObra = Me.lstObras.SelectedValue.ToString
      mostraObra()
    
     End Sub
    Como corrigir isto?

    Sergio Ivanenko
    quarta-feira, 11 de maio de 2011 23:21

Respostas

  • Voce ja pensou em setar o displaymember e o valuemember antes de passar o datasource ?

    Me.lstObras.DisplayMember = "nomeDaObra"
    Me.lstObras.ValueMember = "idObra"
    Me.lstObras.DataSource = dt

    Pense tbem em retirar o Me.lstObras.SelectedIndex = -1 pois toda vez q voce seta um datasource ele coloca em -1 automaticamente.


    Um forte abraço,

    Atenciosamente,

    Alexsandro Nunes Lacerda
    http://www.alexsandronunes.com.br
    -----------------------------------
    Microsoft MCT | MCPD | MCTS | MCP
    Software Architect e Team Leader
    Especialista .Net

    ## Se esta ajudou proponha como resposta! ##

    • Marcado como Resposta Ivanenko quinta-feira, 12 de maio de 2011 13:21
    quarta-feira, 11 de maio de 2011 23:54
  • Como está atribuindo o datasource, você pode pegar o selecteditem do listbox. Dessa forma você pega o dado tipado e você pode verificar se o .selecteditem não é nothing.

    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro
    • Marcado como Resposta Ivanenko quinta-feira, 12 de maio de 2011 13:21
    quinta-feira, 12 de maio de 2011 12:21

Todas as Respostas

  • Voce ja pensou em setar o displaymember e o valuemember antes de passar o datasource ?

    Me.lstObras.DisplayMember = "nomeDaObra"
    Me.lstObras.ValueMember = "idObra"
    Me.lstObras.DataSource = dt

    Pense tbem em retirar o Me.lstObras.SelectedIndex = -1 pois toda vez q voce seta um datasource ele coloca em -1 automaticamente.


    Um forte abraço,

    Atenciosamente,

    Alexsandro Nunes Lacerda
    http://www.alexsandronunes.com.br
    -----------------------------------
    Microsoft MCT | MCPD | MCTS | MCP
    Software Architect e Team Leader
    Especialista .Net

    ## Se esta ajudou proponha como resposta! ##

    • Marcado como Resposta Ivanenko quinta-feira, 12 de maio de 2011 13:21
    quarta-feira, 11 de maio de 2011 23:54
  • Como está atribuindo o datasource, você pode pegar o selecteditem do listbox. Dessa forma você pega o dado tipado e você pode verificar se o .selecteditem não é nothing.

    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro
    • Marcado como Resposta Ivanenko quinta-feira, 12 de maio de 2011 13:21
    quinta-feira, 12 de maio de 2011 12:21
  • Bruno e Alexando.

    Segui a sugestão dos dois e funcionou.

    Obrigado a ambos.


    Sergio Ivanenko
    quinta-feira, 12 de maio de 2011 13:22