En este vídeo creamos la Ventana de Tipos de Usuario y enseño el uso del control MSHFlexGrid (Microsoft Hierarchical Flexgrid) este control se usa para mostrar información en forma de tabla de Datos, su uso es muy fácil solo se conecta por la propiedades DataMember y DataSource usando un Recorset.
En Nuestro ejemplo conectamos a una tabla Llamada tiposUsuario de la siguiente manera.
Dim RecorsetTemp As New ADODB.Recordset Sql = "Select IdNivelUsuario, nombre_tipo From TiposUsuario Order By nombre_tipo ASC " RecorsetTemp.Open Sql, ConexionADO, adOpenStatic, adLockReadOnly Grid.DataMember = RecorsetTemp.DataMember Set Grid.DataSource = RecorsetTemp.DataSource
La ventana que estamos trabajando es para administra los tipos de usuario que manejara el software. Cada usuario dependiendo de tipo puede acceder a opciones del software que otro no podrán ejemplo:
El Administrador tiene acceso a todo, pero el caso del vendedor solo tiene acceso a hacer ventas, entonces en esta ventana configuraremos los accesos para cada usuario.
Siguiente con el desarrollo del software se crearon los siguientes sub procedimientos:
Sub LlenarGridTiposUs() Dim Sql As String Dim Columnas As Integer Columnas = 2 Sql = "Select IdNivelUsuario, nombre_tipo From TiposUsuario Order By nombre_tipo ASC " Call LlenarGrid(msGrid, Sql, Columnas) msGrid.ColWidth(0) = 0 msGrid.ColWidth(1) = 1100 msGrid.ColWidth(2) = 4000 msGrid.TextMatrix(0, 1) = "ID" msGrid.TextMatrix(0, 2) = "Nombre Tipo" End Sub
El llenarGrisTiposUs se usa para hacer la consulta a la tabla y pasar esa consulta al sub procedimiento de llenar LlenarGrid que recibe 3 parámetros:
- msGrid: que es el nombre del control MshFlexGrid que usamos en nuestro caso lo renombramos a msGrid
- Sql: es la consulta que le vamos a pasar al procedimiento para que llene el grid
- Columnas: es el numero de columnas que va a manejar el Grid
Este sub procedimiento se coloco en el modulo mod_consultas. El código del sub procedimiento LlenarGrid() es este:
Sub LlenarGrid(Grid As MSHFlexGrid, Sql As String, TotalColum As Integer) Dim RecorsetTemp As New ADODB.Recordset RecorsetTemp.Open Sql, ConexionADO, adOpenStatic, adLockReadOnly Grid.Redraw = False 'desactivamos el repintado en pantalla Grid.FixedRows = 0 Grid.Rows = 0 Grid.DataMember = RecorsetTemp.DataMember Set Grid.DataSource = RecorsetTemp.DataSource 'vinculamos con el recorset Grid.AddItem "", 0 'se agrega una fila al grid If Grid.Row > 1 Then Grid.FixedRows = 1 'si hay mas de un registro se habilita el titulo 'recorre las celdas del titulo del grid y le da color For I = 1 To TotalColum Grid.Row = 0 Grid.Col = I 'va recorriendo las celdas de la primera fila Grid.CellBackColor = &H8C5828 'color azul para el fondo Grid.CellAlignment = flexAlignCenterCenter 'texto centrado Grid.CellForeColor = vbWhite 'color blanco para el texto Grid.CellFontBold = True 'Negrita Next I 'este recorrido es para colorear filas pares en el grid para darle una mejor vista al usuario For fila = 1 To Grid.Rows - 1 Grid.Row = fila If fila Mod 2 = 0 Then 'si la fila tiene como modulo 2 entonces es un numero par For I = 1 To TotalColum Grid.Col = I Grid.CellBackColor = &HFEEEDD 'color de fondo para la celda Next I End If Next fila Grid.Redraw = True 'se habilita el repintado End Sub
Se vería de la siguiente manera:
Se quiere que al dar doble clic sobre una de las filas del grid se puede editar el tipo de usuario para eso se creo un sub procedimiento:
Dim IdTipoUsuario Sub EditarTipo() If msGrid.Row > 0 Then IdTipoUsuario = msGrid.TextMatrix(msGrid.Row, 1) txtNombreTipo = msGrid.TextMatrix(msGrid.Row, 2) End If End Sub Private Sub msGrid_DblClick() Call EditarTipo End Sub
Para guardar el Tipo de Usuario se tiene en cuenta el valor de la variable IdTipoUsuario si es = 0 quiere decir que es un nuevo registro y es mayo a cero quiere decir que se va a actualizar.
Después de guardar se llama al evento Clic del botón nuevo que lo que hace es limpiar el textbox y llamar al sub procedimiento de LlenarGridTiposUs
Sub GuardarTipoUsuario() If txtNombreTipo = "" Then MsgBox "Debe llenar el nombre del tipo de usuario", vbExclamation, "Error" Exit Sub End If If IdTipoUsuario = 0 Then IdTipoUsuario = UltimoIdUsuario("TiposUsuario", "IdNivelUsuario") Sql = "Insert Into TiposUsuario (IdNivelUsuario, nombre_tipo) Values (" & IdTipoUsuario & ",'" & txtNombreTipo & "') " Else Sql = "Update TiposUsuario SET nombre_tipo = '" & txtNombreTipo & "' Where IdNivelUsuario = " & IdTipoUsuario End If ConexionADO.Execute Sql Call LlenarGridTiposUs End Sub Private Sub cmdGuardar_Click() Call GuardarTipoUsuario Call cmdNuevo_Click End Sub Private Sub cmdNuevo_Click() IdTipoUsuario = 0 txtNombreTipo.Text = "" txtNombreTipo.SetFocus End Sub
En El Evento Load del formulario se llama al LlenarGridTiposUs para que al abrir el formulario nos muestre la lista de tipos de usuario:
Private Sub Form_Load() Call LlenarGridTiposUs IdTipoUsuario = 0 End Sub
Al MSHFlexGrid se le cambiaron varias propiedades que fueron las siguientes:
BackColorFixed: &H009A620E&
SelectionMode: 1-flexSelectionByRow
Fond: Verdana 9pt
Siguiente Lección Parte 14 Ventana de Búsqueda de Usuarios