Visual Basic - Problema con ValueField en DropDownList(DDL)

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Problema con ValueField en DropDownList(DDL)

Publicado por Emanuel (2 intervenciones) el 05/01/2018 16:22:43
Hola, buen día!

Después de investigar bastante y probar bastantes cosas acudo a ustedes y a su experiencia a ver si me pueden ayudar con un tema que me esta trabando bastante en un proyecto.

Resumen rápido: Proyecto web de administración de capacitaciones internas en una empresa X en donde tiene vb .net en Back-End.

En la vista de Administración, tengo una solapa de "Modificación de Asignación" donde se puede modificar datos de una asignación de un curso a una persona o un grupo de personas.

El flujo es el siguiente:
1- Se selecciona el Usuario que tiene el curso a modificar. ( en un DropDownList)
2- De acuerdo a ésta selección se llena otro DDL con todos los cursos asignados que tiene el usuario en cuestión.
3- Posterior a la selección de la asignación se llenan varios textBoxs con los datos que contiene ésta asignación.
(dejo foto adjunta para que puedan visualizar la humilde interfaz)

El problema cual es? Es que cuando yo selecciono la asignación no me toma el valor real que tiene la asignación en el ValueField, sino que éstos se ponen consecutivamente siempre del 1 a n.

Entonces por ejemplo: la asignación que aparece primera en el DDL que en mi BD de SQL tiene un idAsignacion = 1909, cuando yo la selecciono en el DDL me toma el valor de ValueField = 1, entonces no puedo filtrar en mi query posterior para traer los correctos datos, sino que me trae los datos de la asignación 1. De igual forma me pasa en otros CU, pero solucionando éste también podre solucionar los demás, dejo el código implicado en la cuestión.

-------------------------------------------------------------------
Cuando cambia la selección del usuario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Protected Sub ddl_usuario_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddl_usuario.SelectedIndexChanged
 
        If ddl_usuario.SelectedIndex = 0 Then
              .
              .
              .
        Else
 
            cargarDropDownListCondicion(ddl_NombreCurso,
                                        "select a.idAsignacion,a.usuario,c.nombre,c.idCurso from asignacion a INNER JOIN curso C on c.idCurso = a.idCurso where usuario =  '" & ddl_usuario.SelectedValue & "' and estado in (2)",
                                        "nombre",
                                        "idAsignacion")
 
        End If
------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub cargarDropDownListCondicion(ByVal DropDown As DropDownList,
                                        ByVal cmd As String, ---> (le paso como parámetro la consulta hecha)
                                  ByVal textField As String, --> ( le paso que campo de la tabla es el texto a mostrar)
                                    ByVal valueField As String) --> ( le paso que campo de la taba es el value)
        Dim item As New ListItem("Seleccionar", 0)
        Dim tabla As DataTable
 
        tabla = ejecuto_sql(cmd) ---> ("ejecuto_sql" es un function que hace una query a la bd y retorna una datatable)
        DropDown.DataSource = tabla
        DropDown.DataTextField = textField
        DropDown.DataValueField = valueField
 
 
        DropDown.DataBind()
        DropDown.Items.Insert(0, item)
    End Sub
-------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Protected Sub ddl_NombreCurso_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddl_NombreCurso.SelectedIndexChanged
 
        If ddl_NombreCurso.SelectedIndex = 0 Then
            Me.txt_Marca.Text = ""
            Me.txt_fechaLimite.Text = ""
            Me.txt_motivoCancelacion.Text = ""
            Me.txt_motivoCancelacion.Enabled = False
            Me.txt_descripcion.Text = ""
 
        Else
 
            Dim cmd As String
            Dim tabla As DataTable
 
            cmd = "select a.idAsignacion , m.nombreMarca,a.fechaLimite,a.motivoCancelacion,a.descripcion from asignacion a INNER Join curso C on c.idCurso = a.idCurso INNER JOIN marca M on m.idMarca = c.marca where a.idAsignacion =  " & Me.ddl_NombreCurso.SelectedIndex
 
            tabla = leo_tabla_p(cmd)
 
            Dim fecha = tabla.Rows(0)("fechaLimite")
            Dim fecha2 As DateTime = tabla.Rows(0)("fechaLimite")
 
            Me.txt_Marca.Text = tabla.Rows(0)("nombreMarca")
            Me.txt_fechaLimite.Text = fecha2.ToString("yyyy-MM-dd")
            Me.txt_fechaLimite.Enabled = True
            Me.txt_idAsignacion.Text = tabla.Rows(0)("idAsignacion")
            Me.txt_descripcion.Text = tabla.Rows(0)("descripcion")
            Me.txt_descripcion.Enabled = True
            Me.cb_cancelar.Enabled = True
 
        End If
    End Sub
-------------------------------------------------------------------

Desde ya muchas gracias y espero sus comentarios y/o preguntas!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema con ValueField en DropDownList(DDL)

Publicado por Emanuel (2 intervenciones) el 05/01/2018 16:39:40
Ok, como pensé... estoy tan quemado que no vi el .SelectedIndex que había puesto en el tercer codigo cuando armo la consulta en la variable "cmd"... simplemente cambie a .SelectedValue y anduvo...


Me parece que es hora de un descanso para seguir nuevamente despues...


Disculpen la apertura del Tema al vicio, revisando que tengan toda la info posible me di cuenta de la solución!!

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar