
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:
------------------------------------------------------------------------
-------------------------------------------------------------------
-------------------------------------------------------------------
Desde ya muchas gracias y espero sus comentarios y/o preguntas!
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!
- Capture.rar(12,0 KB)
Valora esta pregunta


0