none
DropDownList tem um SelectedValue que é inválido RRS feed

  • Pergunta

  • Qual a melhor solução p/ que o DropDownList2_UF não retorne com erro por estar sem o conteúdo desejado? 

    Na condição do campo não ser obrigatório, deixo SelectedIndex = 0 : - Selecione opção abaixo retorna com:
    Assim, retorna com: "  inválido porque ele não existe na lista de itens "

            DropDownList2_UF.Items.Clear()
            DropDownList2_UF.DataSource = Retorno_DataSet.Tables("DSet_tb_uf")
            DropDownList2_UF.DataTextField = ("UFNOME")
            DropDownList2_UF.DataValueField = ("UFCOD")
            DropDownList2_UF.DataBind()
            DropDownList2_UF.Items.Insert(0, "- Selecione opção abaixo")
            DropDownList2_UF.SelectedIndex = 0 

    Pensei em inserir um registro com UFNOME = - Selecione opção abaixo

    e deixar o   DropDownList2_UF.SelectedValue = UFCOD " Valor referente a - Selecione opção abaixo"

    Mas parece-me não ser uma boa prática, alguma sugestão?

    segunda-feira, 27 de maio de 2013 17:51

Respostas

  • existe uma propriedade chamada rowsaffected talvés nela vc consiga isso, por ai desse jeito dá erro mesmo.

    Junior

    • Marcado como Resposta Wilson Boris segunda-feira, 27 de maio de 2013 20:04
    segunda-feira, 27 de maio de 2013 20:00

Todas as Respostas

  • Wilson não entendi esse seu erro por estar sem o conteudo desejado ? já que o dropdownlist mostra um conteudo que é selecionado, como ele traria um valor que não estaria na sua lista ?


    Junior

    segunda-feira, 27 de maio de 2013 18:18
  • Olá Junior, obrigado pelo retorno.

    Qdo postei estava retornando este erro, agora não sei o que fiz  e retorna outro erro.

    Fazendo um BreakPoint no cod abaixo qdo chega na linha  Dim qtd As Integer = com.ExecuteNonQuery() ele pula para catch. 

    segunda-feira, 27 de maio de 2013 18:54
  • Esse teu com.executenonquery se refere a qual select ?

    Pelo que vc esta fazendo deve ser um select que deve retornar um inteiro e não uma lista ja que vc declarou :

    dim qtd as integer = com.executenonquery


    Junior

    segunda-feira, 27 de maio de 2013 19:05
  • Public Sub alterar()

            Dim altera As ClassModel3_Endereco_PJ = New ClassModel3_Endereco_PJ
            Dim aRET As ArrayList = New ArrayList()
            aRET = altera.altera_endereco(RadioButtonList1_Situacao.SelectedValue, RadioButtonList2_Tipo.SelectedValue, TextBox1_Logradouro.Text, TextBox2_Numero.Text, DropDownList1_Bairro_local.SelectedValue, TextBox3_Tel_fixo.Text, TextBox4_Tel_cel.Text, DropDownList2_UF.SelectedValue, DropDownList3_Mun.SelectedValue, TextBox5_Email.Text, Label1_id.Text, TextBox6_Obs.Text, DropDownList5_Pesquisa.SelectedValue)
            If Convert.ToInt32(aRET(0)) >= 1 Then
                Label1_retorno_CRUD.Text = (String.Format("{0} Registro alterado com sucesso.", Convert.ToString(aRET(0))))
            End If

        End Sub

     Public Function altera_endereco(p_cod_situacao, p_cod_tipo, p_logradouro, p_numero, p_cod_bairro_localidade, p_telefone_fixo, p_telefone_celular, p_cod_uf, p_cod_mun, p_email, p_cod_pj, p_obs, p_id_cad_endereco) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "UPDATE tb_cad_endereco SET  cod_situacao=@Par1, cod_tipo=@Par2, logradouro=@Par3, numero=@Par4, cod_bairro_localidade=@Par5, telefone_fixo=@Par6, telefone_celular=@Par7, cod_uf=@Par8, cod_mun=@Par9, email=@Par10, cod_pj=@Par11, obs=@Par12 " + _
                               " WHERE id_cad_endereco=@Par13 "
            Dim param As ArrayList = New ArrayList()
            param.Add(p_cod_situacao)
            param.Add(p_cod_tipo)
            param.Add(p_logradouro)
            param.Add(p_numero)
            param.Add(p_cod_bairro_localidade)
            param.Add(p_telefone_fixo)
            param.Add(p_telefone_celular)
            param.Add(p_cod_uf)
            param.Add(p_cod_mun)
            param.Add(p_email)
            param.Add(p_cod_pj)
            param.Add(p_obs)
            param.Add(p_id_cad_endereco)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function

    Public Class Class2_ExecuteBD
        Public Shared Function Comando(commando As String, param As ArrayList)
            Dim retorno As ArrayList = New ArrayList()
            Dim erro As Exception
            Dim erromensagem As String = ""
            Dim DT As DataTable = New DataTable()
            Using CN As SqlConnection = New SqlConnection()
                Try
                    CN.ConnectionString = My.Settings.cn1
                    Dim com As SqlCommand = New SqlCommand()
                    com.CommandText = commando
                    com.CommandType = CommandType.Text
                    Dim c As Integer
                    For Each item In param
                        c += 1
                        com.Parameters.Add(String.Format("@Par{0}", c), ClassData2_Banco.GetDBType(item.GetType())).Value = item
                    Next
                    com.Connection = CN
                    CN.Open()
                    Dim qtd As Integer = com.ExecuteNonQuery()
                    retorno.Add(qtd)
                    CN.Close()
                    Return retorno
                Catch ex As InvalidCastException
                    erro = ex
                    erromensagem = "Erro de conversão de dados"
                    retorno.Add(0)
                    retorno.Add(erro)
                    retorno.Add(erromensagem)
                Catch ex As SqlException
                    erro = ex
                    erromensagem = "Erro ao acessar o Banco de Dados"
                    retorno.Add(0)
                    retorno.Add(erro)
                    retorno.Add(erromensagem)
                Catch ex As AccessViolationException
                    erro = ex
                    erromensagem = "Erro de Violação de acesso a BD"
                    retorno.Add(0)
                    retorno.Add(erro)
                    retorno.Add(erromensagem)
                Catch ex As Exception
                    erro = ex
                    erromensagem = "Erro Generico não esperado"
                    retorno.Add(0)
                    retorno.Add(erro)
                    retorno.Add(erromensagem)
                End Try
            End Using
            Return retorno
        End Function
    segunda-feira, 27 de maio de 2013 19:26
  • se o comando é um update pq vc esperar que ele retorne um inteiro ? um executenonquery retorna um boolean (true,false).


    Junior

    segunda-feira, 27 de maio de 2013 19:31
  • Junior, 

    o meu propósito foi de ter o "qtd" com Integer na linha:  Dim qtd As Integer = com.ExecuteNonQuery(),

    pois espero  do ArrayList que me informe quantos registros foram afetados, no caso pelo UPDATE, mas poderia ser um DELETE ou INSERT.

    segunda-feira, 27 de maio de 2013 19:54
  • Junior, 

    o meu propósito foi de ter o "qtd" com Integer na linha:  Dim qtd As Integer = com.ExecuteNonQuery(),

    pois espero  do ArrayList que me informe quantos registros foram afetados, no caso pelo UPDATE, mas poderia ser um DELETE ou INSERT.

    complementando o código:

      Imports System.Data
    Imports System.Data.Common
    Imports System.Data.SqlClient
    Imports System.Text
    Imports System.Collections.Generic
    Imports System.Linq

    Public Class ClassData2_Banco
        Public Function AbreConexao() As DbConnection
            Dim factory As DbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient")
            Dim conexao As DbConnection = factory.CreateConnection()
            Dim builder As DbConnectionStringBuilder = factory.CreateConnectionStringBuilder()
            Dim strCnn As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()

            strCnn.DataSource = "PC"
            strCnn.InitialCatalog = "SIS_SQL"
            strCnn.IntegratedSecurity = True
            strCnn.MinPoolSize = 2
            strCnn.MaxPoolSize = 100
            builder.ConnectionString = strCnn.ConnectionString
            conexao.ConnectionString = builder.ConnectionString
            Return conexao
        End Function


        Public Shared Function GetDBType(theType As System.Type) As SqlDbType
            Dim param As SqlParameter = New SqlParameter()
            If theType.Name = "String" Then
                param.SqlDbType = SqlDbType.VarChar
            End If
            If theType.Name = "Int" Or theType.Name = "Int16" Or theType.Name = "Int32" Then
                param.SqlDbType = SqlDbType.Int
            End If
            If theType.Name = "DateTime" Then
                param.SqlDbType = SqlDbType.Date
            End If
            If theType.Name = "boll" Then
                param.SqlDbType = SqlDbType.Bit
            End If
            Return param.SqlDbType
        End Function

    End Class

    segunda-feira, 27 de maio de 2013 19:56
  • existe uma propriedade chamada rowsaffected talvés nela vc consiga isso, por ai desse jeito dá erro mesmo.

    Junior

    • Marcado como Resposta Wilson Boris segunda-feira, 27 de maio de 2013 20:04
    segunda-feira, 27 de maio de 2013 20:00
  • Junior,

    sem querer estender-me quando eu faço um UPDATE alterando um TextBox ou o proprio DropDownList2_UF, mas escolhendo uma opção exceto  "- Selecione opção abaixo", 

    o código funciona.

    segunda-feira, 27 de maio de 2013 20:18