none
Llenado de DropDownList RRS feed

  • Pregunta

  • Saludos

    Tengo 2 Drop DownList

    el primero lo lleno de esta manera:

       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim CmdProy As New SqlCommand(“select pro_cor_pro, pro_nom_pro from sg_pro order by pro_nom_pro”, Conecta)
            Dim DaProy As New SqlDataAdapter(CmdProy)
            DaProy.Fill(ds)
            ddrproy.DataSource = ds.Tables(0)
            ddrproy.DataTextField = ds.Tables(0).Columns(“pro_nom_pro”).ToString()
            ddrproy.DataValueField = ds.Tables(0).Columns(“pro_cor_pro”).ToString()
            ddrproy.DataBind()
        End Sub

     Una Vez seleccionado el elemento:

    Protected Sub ddrproy_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddrproy.SelectedIndexChanged
            'ddretap.Items.Clear()
            ddretap.Items.Add(New ListItem(0, "Seleccione Etapa"))
            valorproyecto = Convert.ToInt32(ddrproy.SelectedIndex)
            Dim sql As String = "select pro_cor_pro, eta_nom_eta from sg_eta where pro_cor_pro='" + Str(valorproyecto) + "'"
            Dim CmdEtap As New SqlCommand(sql, Conecta)
            Dim DaEtap As New SqlDataAdapter(CmdEtap)
            Conecta.Open()
            DaEtap.Fill(ds)
            ddretap.DataSource = ds.Tables(0)
            ddretap.DataTextField = ds.Tables(0).Columns("eta_nom_eta").ToString()
            ddretap.DataValueField = ds.Tables(0).Columns("pro_cor_pro").ToString()
            ddretap.DataBind()
            Conecta.Close()
        End Sub

    Pero al ejecutar se produce esto:

    alguien me podría indicar que estoy haciendo mal, para que esto no me pase??

    PD: las Propiedades : AppendDataBoundItem y AutoPostBack del elemento ddrproy  están en true, pues si alguna esta en false no funciona que el segundo dropdownlist  cargue datos

    sábado, 5 de mayo de 2018 18:51

Respuestas

  • hola

    porque usas esto

    ddrproy.DataTextField = ds.Tables(0).Columns(“pro_nom_pro”).ToString()
    ddrproy.DataValueField = ds.Tables(0).Columns(“pro_cor_pro”).ToString()

    porque no simplemente

    ddrproy.DataTextField = “pro_nom_pro”
    ddrproy.DataValueField = “pro_cor_pro”

    solo tienes que indicar el nombre de las columna

    >>Pero al ejecutar se produce esto:

    recuerda que al realizaste el postback debes validarlo, algo como ser

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
    	If Not IsPostBack Then
    		LoadProy()
    	End If
    
    End Sub
    
    
    Private Sub LoadProy()
    
    	Dim CmdProy As New SqlCommand(“select pro_cor_pro, pro_nom_pro from sg_pro order by pro_nom_pro”, Conecta)
    	
    	Dim DaProy As New SqlDataAdapter(CmdProy)
    	Dim dt As New DataTable
    	DaProy.Fill(dt)
    	
    	ddrproy.DataSource = dt
    	ddrproy.DataTextField = “pro_nom_pro”
    	ddrproy.DataValueField = “pro_cor_pro”
    	ddrproy.DataBind()
    	
    End Sub

    saludos

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de mayo de 2018 15:15

Todas las respuestas

  • Fuera de que concatena SQL, que es muy malo, no veo una razón de peso o bien obvia del problema que muestra.

    Con Google Chrome o similar, extraiga el HTML generado para ese DDL.  Revise cuántas opciones contiene.


    Jose R. MCP
    Code Samples

    domingo, 6 de mayo de 2018 1:34
    Moderador
  • vale, podrías aportar con algún ejemplo mejor, se agradecería.

    Saludos

    domingo, 6 de mayo de 2018 2:22
  • Primero se define la consulta con un parámetro en lugar de la concatenación del valor.

    Dim sql As String = "select pro_cor_pro, eta_nom_eta from sg_eta where pro_cor_pro=@pro"

    Luego, después de crear el objeto SqlCommand, se agrega el valor del parámetro:

    Dim CmdEtap As New SqlCommand(sql, Conecta)
    CmdEtap.Parameters.Add("pro", SqlDbType.<tipo de dato aquí>).Value = valorproyecto

    Pero todo esto difícilmente va a solucionar el problema que usted describe, que parece ser un <select> con muchos <option> en blanco.  Debería enfocarse en la parte del HTML generado.


    Jose R. MCP
    Code Samples

    domingo, 6 de mayo de 2018 3:28
    Moderador
  • hola

    porque usas esto

    ddrproy.DataTextField = ds.Tables(0).Columns(“pro_nom_pro”).ToString()
    ddrproy.DataValueField = ds.Tables(0).Columns(“pro_cor_pro”).ToString()

    porque no simplemente

    ddrproy.DataTextField = “pro_nom_pro”
    ddrproy.DataValueField = “pro_cor_pro”

    solo tienes que indicar el nombre de las columna

    >>Pero al ejecutar se produce esto:

    recuerda que al realizaste el postback debes validarlo, algo como ser

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
    	If Not IsPostBack Then
    		LoadProy()
    	End If
    
    End Sub
    
    
    Private Sub LoadProy()
    
    	Dim CmdProy As New SqlCommand(“select pro_cor_pro, pro_nom_pro from sg_pro order by pro_nom_pro”, Conecta)
    	
    	Dim DaProy As New SqlDataAdapter(CmdProy)
    	Dim dt As New DataTable
    	DaProy.Fill(dt)
    	
    	ddrproy.DataSource = dt
    	ddrproy.DataTextField = “pro_nom_pro”
    	ddrproy.DataValueField = “pro_cor_pro”
    	ddrproy.DataBind()
    	
    End Sub

    saludos

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de mayo de 2018 15:15
  • Gracias , hare las pruebas y les indicaré los resultados
    lunes, 7 de mayo de 2018 16:06