none
Mantener el elemento seleccionado de un DropDownList1 (cmbPuesto) al hacer clic en un boton RRS feed

  • Pregunta

  • Hola buenas tardes:

     

    Alguien podria apoyarme a resolver este problema:

     

    Tengo una pagina web hecha en asp.net y vb 2005 en la cual deseo validar un usuario, para lo cual cuento con 2 textbox y un DropDownList (cmbPuesto) ok. Lo que deseo hacer es lo siguiente; el usuario que desee entrar debe colocar su nombre, puesto y password y dar clien en un boton (btnEntrar) y se enviaran los datos. Si envio los datos correspondientes al primer elemento seleccionado me envia un mensaje de bienvenido (solo es momentaneo) pero por el contrario si escojo el segundo elemento del DropDownList1 y los otros datos son correctos me envia "Usuario no valido" por que tengo entendido que la pagina se vuelve a cargar y envia el primer elemento. Se carga otra vez y nunca se envia el elemento que selecciono del DropDownList1, bueno si se envia pero siempre el primero.

     

    Al seleccionar un elemnto del DropDownList1 realmente lo que quiero es mandar su valor no el texto que se ve.

     

    Nota:El DropDownList1 lo lleno a traves de una dataset que esta en otra clase. Igualmente los datos se envian a otra clase que los valida.

     

    Aqui dejo el codigo por si algo me quiere ayudar. Gracias

     

     

    ME URGE RESOLVER ESTE PROBLEMA

     

    Imports CapaNegocio

    Imports System.Data

     

    Partial Class _Default

    Inherits System.Web.UI.Page

    Dim objSesion As Sesion

    'PARA EL FILTARDO DE DATos

    Private ds, ds2 As New DataSet

    'para el indice del cmbbox

    Private variable, variable2 As Integer

    Dim itemText As String

    Dim varClave As String = String.Empty

    Protected Sub Page_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed

    objSesion = Nothing

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

     

    objSesion = New Sesion

    Dim Objeto As Object

    Dim Row As DataRow

     

    If Not IsPostBack Then

    cmbPuesto.Items.Clear()

    Objeto = objSesion.CargarComboPuesto()

     

    If Not TypeOf Objeto Is DataSet Then

    MsgBox(Objeto, MsgBoxStyle.Critical, "ERROR DE CONEXION")

    Exit Sub

    End If

    ds = Objeto

     

    'Para insertar los datos del DataSet al combobox de Puestos

    For Each Row In ds.Tables(0).Rows

    'la posicion 1 es el nombre y la 0 es el password

    cmbPuesto.Items.Add(Row(1))

    Next

    End If

     

     

     

    End Sub

     

    Protected Sub btnEntrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEntrar.Click

     

    Dim Num As Integer

    Dim dr As DataRow

    dr = ds.Tables(0).Rows(variable)

    varClave = dr.Item(0)

     

     

    objSesion.NOMBRE() = txtNombre.Text

    objSesion.PASSWORD() = txtPassword.Text

    objSesion.ID_PUESTO() = varClave

    Num = objSesion.DatosSesion()

    If Num = 1 Then

    Label4.Text = "Bienvenido"

    Else

    Label4.Text = "Usuario No Valido"

    End If

     

     

    End Sub

    Protected Sub cmbPuesto_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbPuesto.SelectedIndexChanged

     

    variable = cmbPuesto.SelectedItem.Value

     

    End Sub

    End Class

    miércoles, 16 de enero de 2008 19:21

Todas las respuestas

  •  Angsus Escribió:

    Hola buenas tardes:

     

    Alguien podria apoyarme a resolver este problema:

     

    Tengo una pagina web hecha en asp.net y vb 2005 en la cual deseo validar un usuario, para lo cual cuento con 2 textbox y un DropDownList (cmbPuesto) ok. Lo que deseo hacer es lo siguiente; el usuario que desee entrar debe colocar su nombre, puesto y password y dar clien en un boton (btnEntrar) y se enviaran los datos. Si envio los datos correspondientes al primer elemento seleccionado me envia un mensaje de bienvenido (solo es momentaneo) pero por el contrario si escojo el segundo elemento del DropDownList1 y los otros datos son correctos me envia "Usuario no valido" por que tengo entendido que la pagina se vuelve a cargar y envia el primer elemento. Se carga otra vez y nunca se envia el elemento que selecciono del DropDownList1, bueno si se envia pero siempre el primero.

     

    Al seleccionar un elemnto del DropDownList1 realmente lo que quiero es mandar su valor no el texto que se ve.

     

    Nota:El DropDownList1 lo lleno a traves de una dataset que esta en otra clase. Igualmente los datos se envian a otra clase que los valida.

     

    Aqui dejo el codigo por si algo me quiere ayudar. Gracias

     

     

    ME URGE RESOLVER ESTE PROBLEMA

     

    Imports CapaNegocio

    Imports System.Data

     

    Partial Class _Default

    Inherits System.Web.UI.Page

    Dim objSesion As Sesion

    'PARA EL FILTARDO DE DATos

    Private ds, ds2 As New DataSet

    'para el indice del cmbbox

    Private variable, variable2 As Integer

    Dim itemText As String

    Dim varClave As String = String.Empty

    Protected Sub Page_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed

    objSesion = Nothing

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

     

    objSesion = New Sesion

    Dim Objeto As Object

    Dim Row As DataRow

     

    If Not IsPostBack Then

    cmbPuesto.Items.Clear()

    Objeto = objSesion.CargarComboPuesto()

     

    If Not TypeOf Objeto Is DataSet Then

    MsgBox(Objeto, MsgBoxStyle.Critical, "ERROR DE CONEXION")

    Exit Sub

    End If

    ds = Objeto

     

    'Para insertar los datos del DataSet al combobox de Puestos

    For Each Row In ds.Tables(0).Rows

    'la posicion 1 es el nombre y la 0 es el password

    cmbPuesto.Items.Add(Row(1))

    Next

    End If

     

     

     

    End Sub

     

    Protected Sub btnEntrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEntrar.Click

     

    Dim Num As Integer

    Dim dr As DataRow

    dr = ds.Tables(0).Rows(variable)

    varClave = dr.Item(0)

     

     

    objSesion.NOMBRE() = txtNombre.Text

    objSesion.PASSWORD() = txtPassword.Text

    objSesion.ID_PUESTO() = varClave

    Num = objSesion.DatosSesion()

    If Num = 1 Then

    Label4.Text = "Bienvenido"

    Else

    Label4.Text = "Usuario No Valido"

    End If

     

     

    End Sub

    Protected Sub cmbPuesto_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbPuesto.SelectedIndexChanged

     

    variable = cmbPuesto.SelectedItem.Value

     

    End Sub

    End Class

     

    Hola, a ver si puedo ayudar,

     

    te recomiendo hacer el llenado del combo disponiendo de  un datatable como fuente de datos de la siguiente forma. 

    Es importante ver que para poder consultar el "value" luego cuando se dispara el evento selectedindexchanged, debes indicar que campo de tu DataTable debe estar como Value.

    Abajo dejo un código que muestra como hacerlo.

    Bloque de código

     

    Dim sqlConeccion As New SqlConnection("Data Source=localhost;Initial Catalog=Northwind;User ID=sa")

    Dim dsDatos1 As New DataSet

    Dim daDatos1 As New SqlDataAdapter("select * from Employees", sqlConeccion)

    dsDatos1.Tables("Employee").DefaultView.Sort = "LastName"

    Me._ddlAuthors.DataSource = dsDatos1.Tables("Employee")

    Me._ddlAuthors.DataTextField = "LastName"

    Me._ddlAuthors.DataValueField = "EmployeeID"

    Me._ddlAuthors.Visible = True

    Me._ddlAuthors.DataBind()

    Me._ddlAuthors.Items.Insert(0, "SELECCIONE")

    Me._ddlAuthors.SelectedIndex = 0

     

     

    No obstante si queres mantener la forma actual, sería de la siguiente forma, indicando donde dice row(x) el index de row que queres que poseea el value en el selectedindexchanged

     

    Bloque de código

    Me._ddlAuthors.Items.Add(new ListItem(row(0),row(x))

     

     

    Si te he podido ayudar, por favor no olvides marcar la solución dada como respuesta correcta.

     

    Saludos,

     

    miércoles, 16 de enero de 2008 19:38
  •  

    Aun asi no me funciona. Sucede lo mismo. Cuando traigo los datos los coloco en el cmbpuesto de la sigueinte manera:

     

    ds = Objeto

    'Para insertar los datos del DataSet al combobox de Puestos

    For Each Row In ds.Tables(0).Rows

    'la posicion 1 es el nombre y la 0 es el password

    cmbPuesto.Items.Add(Row(1))

    Next

     

    objeto trae n dataset con los datos de la tabla de Puesto la cual tiene id_puesto, nombre_puesto y descripcion. Al agregar al cmbpuesto agrego el nombre de puesto y al seleccionar obtengo el value en row(0)

     

    variable = cmbPuesto.SelectedItem.Value

     

    el problema es cuando cambia de posicion se vuelve a cargar con todos los elementos y no se queda la posicion o el value del elemento que estaba seleccionado. Coloque en el page_load

     

    la siguiente sentencia

     

    If Not IsPostBack Then

     

    Objeto = objSesion.CargarComboPuesto()  --- aqui llamo a una function que esta en otra clase. esta funcion me devuelve el dataset con los datos. Mi aplicacion es asi por que esta em tres capas

    If Not TypeOf Objeto Is DataSet Then

    MsgBox(Objeto, MsgBoxStyle.Critical, "ERROR DE CONEXION")

    Exit Sub

    End If

    ds = Objeto

    'Para insertar los datos del DataSet al combobox de Puestos

    For Each Row In ds.Tables(0).Rows

    'la posicion 1 es el nombre y la 0 es el password

    cmbPuesto.Items.Add(Row(1))

    Next

    Dim dr As DataRow

    dr = ds.Tables(0).Rows(variable)

    varClave = dr.Item(0)

     

    end if

    miércoles, 16 de enero de 2008 20:48
  • Hola, a ver si puedo ayudar,

     

    te voy a dar un link a otro post, donde hay un ejemplo similar a lo que buscas, que funciona bien. Tal vez sería interesante que copies dicho ejemplo en un aspx nuevo, lo pruebes, y una vez que este funcionando compares las diferencias con la totalidad de tu código.

     

    ver el post de 14 ene 2008, 4:10 de Fer Antivero, esta tanto el aspx como el código que va en la clase, y trabaja con la base de datos que viene por defecto en sqlserver Northwind:

    http://forums.microsoft.com/msdn-es/ShowPost.aspx?PostID=2686190&SiteID=11

     

    Si te sirvio, directamente vota en el otro post como correcta la respuesta.

     

    Saludos,

    jueves, 17 de enero de 2008 1:29