Problema con el código de un formulario

Estoy desarrollando un sistema de punto de venta en VB.net
2010 con bases de datos en SQL 2012. Siendo un sistema de ventas, el
mismo tendrá diferentes usuarios, y cada usuario podrá acceder a ciertos
formularios a los cuales se les asigna un permiso.
Para eso tengo 2 tablas:

Tabla 1) USUARIOS, con los campos usuario(string), password(string)
Tabla 2) PERMISOS, con los campos usuario(string), programa(string), acceso(boolean), graba(boolean), borra(boolean).

Cuando un usuario abre algún formulario, en el evento load del mismo tengo el
proceso que verifica en la tabla PERMISOS si este cuenta con
autorización para acceder (abrir el formulario), igualmente cuando el
usuario presiona el botón de grabar (verifico el acceso Graba) y lo
mismo para el permiso del botón borrar. Hasta aquí todo bien.

Mi problema resulta, al momento de que quiero hacer el formulario en el
cual se le pueden agregar o quitar permisos a un usuario. Para esto, se
entra al formulario de usuarios y luego, desde allí, al formulario de
permisos, el cual recibe como parámetro el nombre del usuario, para
mostrar los accesos que éste tiene.

El formulario de Permisos (formPermisos) tiene varios checkbox, 3 checkbox por cada formulario de mi aplicación.

Tampoco tengo dificultad al momento de que el programa actualice la Tabla Permisos. Mi problema se da en la parte de recuperar la información de la tabla permisos. Es
decir, cuando un usuario es creado, sus permisos están todos
desmarcados, pero cuando el usuario ya existe, puede darse el caso en
que se quiera agregarle un permiso o quitarle uno que ya tiene, por lo
tanto, al abrir el formPermisos de un usuario existente, los checkbox
tienen que aparecer marcados según los valores de la tabla sean
verdaderos o falsos.

Y es eso precisamente lo que no logro
Esquematizar en mi cabeza. A la tabla permisos le hago un select
(Select usuario, programa, acceso, graba, borra from permisos where
usuario = 'elUsuario') Esto, puedo colocarlo en un datareader o en un
dataset, pero luego no se cómo hacer para que el sistema verifique en el
resultado del query y asigne los valores a los checkbox.

Cabe aclarar, que la tabla permisos guarda la información más o menos así:

Usuario Programa Acceso Graba Borra
elUsuario frmProductos true true false

FrmProductos es el nombre del formulario de productos.

1 Respuesta

Respuesta
1

Bueno tienes la forma en tus manos, el CheckBox su propiedad Checked es Bool igual que la base de datos, por lo que tendrías que volcar el resultado de tu Select en un DataTable y asignar el valor del campo en la propiedad del CheckBox.

CheckBox1.Checked = DT.Rows(0)("Campo")

Gracias por la pronta respuesta, comprendo perfectamente el concepto que me planteas, no obstante, me queda la siguiente duda:

Mi datatable, cargada con los datos de una instrucción Select, tendrá más de 1 fila, de hecho, tendrá tantas filas como permisos tenga el usuario. En el código que me explicas, asignas al checkbox1 el valor del "Campo" de la fila cero. Sin embargo, ¿Cómo puedo saber que la fila cero, se corresponde con el permiso representado por el checkbox1?

Por ejemplo: mi checkbox1 se llama chkProductos, y da acceso al mantenimiento de productos. Pero en mi tabla no se qué fila contiene ese dato.

Gracias por tu respuesta.

Bueno a ver, primero concepto de programación, para recorrer un DataTable puedes hacerlo con un ForEach, que recorre todos los elementos Rows de la DataTable.

Luego puedes hacer dentro del ForEach un Select Case, preguntando por el Valor del "Campo", y determinas que valor tiene el campo y a que CheckBox asignar el valor.

ForEach DR in DT.Rows
    Select Case DR("Campo")
        Case "Ventana 1"
            CheckBox1.Checked = DR("Campo")
        Case "Ventana 2"
            CheckBox2.Checked = DR("Campo")
    End Select
End ForEach

Es un código de guía, no se si esta 100% bien, hoy en día programo en C# y a veces se me cruzan los cables con VB que hace muuuuuchos años ya no programo.

DR es una variable DataRow, que toma el Valor del Row de la DT.

Y entrará tantas veces como registros tengas.

Luego el Case determinará el valor del campo y entrará en la opción que corresponda.

Claro en ves de poner "Ventana 1" puedes hacer una variable que tome todos los valores posibles de algún lado, llámese una tabla de SQL u otro medio de almacenamiento, de esta forma quedaría más automatizado por si el programa después crece.

Ya esos detallitos debes dárselos tu.

Muchas gracias, más que el código me sirvió el concepto, ya que era la lógica del ejercicio la que no lograba conceptualizar.

Te agradezco mucho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas