locked
Cómo acceder al control para deshabilitarlo desde otro formulario? RRS feed

  • Pregunta

  • Hola a todos, necesito de sus ayudas, Necesito ingresar a un formulario_principal desde un login de usuario. Todo para restringir algunos controles. pero no entro a la condición "if" y solo entro al "else". Les cuento que estoy trabajando e 3 capas con sql server y procedimientos almacenados.

    private void PBIngresar_Click(object sender, EventArgs e)
            {
                NegUsuario User = new NegUsuario();
                DataTable tabla = new DataTable();
                
                string nomb = "";
                string cargo;
                int id;

                if (txtNombre.Text != "" && txtContrasenya.Text != "")
                {
                    tabla = User.BuscarXNombreContrasenya(txtNombre.Text, txtContrasenya.Text);

                    if (tabla.Rows.Count > 0)
                    {
                        nomb = tabla.Rows[0][0].ToString();
                        cargo = tabla.Rows[0][1].ToString();
                        id = Convert.ToInt32(tabla.Rows[0][2].ToString());
                        if (cargo == "ADMINISTRADOR")
                        {
                            objHijo.barButtonItem1Usuario.Enabled = true; //->Aquí me lo convierte a false                        
                            objHijo.ShowDialog();
                            this.Hide();
                        }
                        else
                        {
                            objHijo.ShowDialog();
                            objHijo.barButtonItem1Usuario.Enabled = false;
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Intente de nuevo", "**AUTO REPUESTOS EDWARD'S**");
                    }
                }
                else
                {
                    MessageBox.Show("Datos Vacíos...");
                }
            }

    Por qué me pasa esto? La lectura "if (cargo == "ADMINISTRADOR")" lo lee bien y depués pasa lo explicado. gracias hermano

    Aquí para acceder al formulario principal

    public static FormPrincipal objHijo;
            public Login()
            {
                InitializeComponent();
                objHijo = new FormPrincipal();
                
            }

    Éste es mi procedimiento capa de negocios:

    public DataTable BuscarXNombreContrasenya(string nombre, string contrasena)
            {
                dtUsuario nombres = new dtUsuario();
                return nombres.LoginNombreContrasena(nombre, contrasena);

            }

    Éste es mi procedimiento capa de Datos:

    public DataTable LoginNombreContrasena(string nomb, string contras)
            {
                DbProviderFactory Factory = DbProviderFactories.GetFactory(Conexion._proveedor);
                DbCommand comando = datosgenericos.crearcomando();
                comando.CommandText = "LoginUsuario";
                comando.CommandType = CommandType.StoredProcedure;

                DbParameter Nomb = Factory.CreateParameter();
                DbParameter Contras = Factory.CreateParameter();
                Nomb.ParameterName = "@Nombre";
                Nomb.Value = nomb;
                Contras.ParameterName = "@Contrasena";
                Contras.Value = contras;

                comando.Parameters.Add(Nomb);
                comando.Parameters.Add(Contras);

                return datosgenericos.ExecuteReader(comando);
            }

    Éste es mi stored Procedure:

    ALTER PROCEDURE [dbo].[LoginUsuario]
    @Nombre varchar(50),
    @Contrasena varchar(50)
    AS
    SELECT        
    (Nombres +' '+ Apellidos) as Nombres, ROL, USUARIO.Id_Usuario
    FROM
                USUARIO

    WHERE (@Nombre=Nombre_Usuario) and (@Contrasena=Contrasena)
    RETURN

    Ésta es mi clase hecha para gestionar las bbdd

    public static DataTable ExecuteReader(DbCommand command)
            {
                DataTable table;
                try
                {

                    command.Connection.Open();
                    DbDataReader reader = command.ExecuteReader();
                    table = new DataTable();
                    table.Load(reader);
                }
                catch (Exception ex)
                {
                    throw ex;


                }
                finally
                {
                    command.Connection.Close();
                }

                return table;
            }

    AYUDA... 


    rammyni

    martes, 19 de mayo de 2020 19:45

Respuestas

  • Bueno, si no entra al "if" es un problema completamente distinto que si entra pero no funciona la asignación de la propiedad del control. Sigue la ejecución usando un punto de ruptura con el debugger y comprueba cuál es el valor que tiene la propiedad "cargo" en el momento de ejecutar esa sentencia. Casi seguro que te encontrarás con que no tiene el valor que estás comparando, y por eso no entra en el if.
    miércoles, 20 de mayo de 2020 5:37
    Moderador
  • Fíjate bien en la captura de pantalla que has pegado. En la variable "cargo", en las variables locales, no se ve la doble comilla al final de "ADMINISTRADOR. Eso indica que tiene espacios por la derecha. Por eso falla el "if", porque un string con espacios no es igual al string sin espacios. Revisa cómo has asignado el valor de esa variable. Puede ser que venga de base de datos y que sea un char en lugar de un varchar, o algo por el estilo.
    miércoles, 20 de mayo de 2020 15:57
    Moderador
  • Pues te cuento que sí hace lectura, habrá otra manera de aplicar la condición? Mandé a llamar el tipo de usuario en una etiqueta para hacer la comparación y aun así sigue sin trabajar correctamente.


    rammyni

    miércoles, 20 de mayo de 2020 15:42
  • UN MILLÓN DE GRACIAS HERMANO.... Estuve perdiendo mucho tiempo en algo que parece insignificante pero es un desastre por la perdida de tiempo. Ahí estaba el problema "base de datos y que sea un char en lugar de un varchar" Así era hermano, la variable la tenía de tipo char y no varchar(50). Gracias nuevamente.

    rammyni

    miércoles, 20 de mayo de 2020 16:20

Todas las respuestas

  • Se me ocurre un caso en el que cuando le pones Enabled=true a un control no funciona y lo deja en false: Si el control está anidado dentro de un contenedor que tiene Enabled=false, entonces no se puede cambiar el Enabled del control; tiene prioridad el Enabled de su contenedor. Revisa dónde está ubicado tu botón, no vaya a ser que esté dentro de alguna otra cosa (tal como un Panel por ejemplo) que tenga Enabled=false.
    martes, 19 de mayo de 2020 20:50
    Moderador
  • Hola, fijate que he revisado detalladamente tu sugerencia y todo está por default a true, el asunto es que no me deja entrar al if y solo al else:

    if (cargo == "ADMINISTRADOR")
                        {
                            objHijo.barButtonItem1Usuario.Enabled = false; --> Aquí no entra...
                            objHijo.button1.Enabled = false; --> Agregué otro control y tampoco
                            objHijo.ShowDialog();
                            this.Hide();
                        }

    Qué pueda estar pasando???


    rammyni

    martes, 19 de mayo de 2020 23:11
  • Bueno, si no entra al "if" es un problema completamente distinto que si entra pero no funciona la asignación de la propiedad del control. Sigue la ejecución usando un punto de ruptura con el debugger y comprueba cuál es el valor que tiene la propiedad "cargo" en el momento de ejecutar esa sentencia. Casi seguro que te encontrarás con que no tiene el valor que estás comparando, y por eso no entra en el if.
    miércoles, 20 de mayo de 2020 5:37
    Moderador
  • Pues te cuento que sí hace lectura, habrá otra manera de aplicar la condición? Mandé a llamar el tipo de usuario en una etiqueta para hacer la comparación y aun así sigue sin trabajar correctamente.


    rammyni

    miércoles, 20 de mayo de 2020 15:42
  • Fíjate bien en la captura de pantalla que has pegado. En la variable "cargo", en las variables locales, no se ve la doble comilla al final de "ADMINISTRADOR. Eso indica que tiene espacios por la derecha. Por eso falla el "if", porque un string con espacios no es igual al string sin espacios. Revisa cómo has asignado el valor de esa variable. Puede ser que venga de base de datos y que sea un char en lugar de un varchar, o algo por el estilo.
    miércoles, 20 de mayo de 2020 15:57
    Moderador
  • UN MILLÓN DE GRACIAS HERMANO.... Estuve perdiendo mucho tiempo en algo que parece insignificante pero es un desastre por la perdida de tiempo. Ahí estaba el problema "base de datos y que sea un char en lugar de un varchar" Así era hermano, la variable la tenía de tipo char y no varchar(50). Gracias nuevamente.

    rammyni

    miércoles, 20 de mayo de 2020 16:20
  • Hola!
    Veo que ya tienes la respuesta! Procedo a cerrar el hilo, si tienes cualquier otra consulta no dudes en abrir un nuevo hilo.

    Muchas gracias por usar los foros de MSDN.

    Luis Diego Mora
    __________

    miércoles, 20 de mayo de 2020 16:43
    Moderador