Grid - VALUE ITEMS (definir la máscara de un combo en la grid)

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:25 PM por David Miralpeix

Útil para cuando queremos que el combo muestre una descripción en vez de un campo código.
IMPORTANTE: La cantidad de registros está limitada. Evitad poner en este campo una select que traiga muchos registros. Ya que para cada registro de la grid, ejecuta la consulta y penaliza en rendimiento y tiempos de carga.

Los combos del grid nos muestran el dato guardado, y permiten visualizar hasta 3 columnas en el desplegable. Cuando queremos que en vez de enseñarnos el dato guardado, nos muestre otro (como una descripción) debemos utilizar la propiedad Value Items.
En principio la máscara se define al crear la columna, como un parámetro de entrada en la función agregaColumna. Cuando el grid ya está definido podemos cambiar la máscara para que sustituya el valor que muestra por otro que esté relacionado en una select.

Definición:
Grid.ValueItems (aCampo as String,[aSql],[aEsResId as Boolean]) AS ValueItems
- aSQL debe indicar 2 campos, donde el primero es el campo que está en la grid y se quiere reemplazar, y el segundo es lo que queremos ver.
- aEsResId indica si lo que queremos ver es una imagen. En este caso, el segundo valor de la select debe devolver el icono correspondiente a la tabla iconos (y por supuesto al repositorio de imagenes de iconos accesible desde el ADMON)


Código SQL

--Esta es la definición de la vista vPers_Icos de la query
create view vPers_Icos
as
select 1 Id, 1037 icono
go
zpermisos vPers_Icos


Código VB6:

 'Formulario de pedidos. Cambiar la máscara del combo para que en vez del IdIva muestre el porcentaje.
Sub Show ()
     gForm.Controls("grdLineas").ValueItems "IdIva","Select IdIva, Porcentaje from Ivas", False
end sub


Ejemplo en un grid con una columna que muestra el icono de una impresora. Usaremos un frmMantenimiento de la tabla de Idiomas, con un campo FormulaSelect que devuelve el valor de un icono.

Sub Main()
     frmAux.Descargar 'ATENCIÓN: DEBE ESTAR SIEMPRE QUE NO SE MUESTRE EL FORMULARIO.
     Set lFrm = gcn.ahoraproceso ("NewFrmMantenimiento",False,gcn)
     lfrm.Form.NombreForm = "Pers_frmMant_Idiomas"
     With lFrm.Grid("Idiomas") ' NO_TRADUCIR_TAG
             .Agregar = True
             .Editar = True
             .Eliminar = True
             .CargaObjetos = False
             .EditarPorObjeto = False
             .Grid.HeadLines = 2
             .AgregaColumna "IdIdioma", 2500, "IdIdioma"
             .AgregaColumna "Descrip", 2500, "Descripción",False
             .AgregaColumna "ICONO", 400, "I", True, , , , , "select id, icono from vPers_Icos", True 
             .Campo ("Icono").Formulaselect = "select 1"
             .campo ("IdIdioma").Default = "Select isnull(max(IdIdioma),0) +1 from Idiomas"
             .From = "Idiomas" 
             .Where = ""
             .ColumnaEscalada = "Descrip"
             .OrdenMultiple = "Descrip"
             .RefrescaSinLoad = True 
             .Refresca = True
     End With
     lFrm.Form.Caption = "Mantenimiento de Idiomas "
     lFrm.Carga , False, 4
End Sub



Código C#:

// Formulario de pedidos. Cambiar la máscara del combo para que en vez del IdIva muestre el porcentaje.

public void Show()
{
    (gForm.Controls["grdLineas"] as ICntGridUsuario).ValueItems("IdIva", "Select IdIva, Porcentaje from Ivas", false);
}


Ejemplo en un grid con una columna que muestra el icono de una impresora. Usaremos un frmMantenimiento de la tabla de Idiomas, con un campo FormulaSelect que devuelve el valor de un icono.

using AhoraAsistentes;
using AhoraOCX;

namespace AhoraScriptsVacia
{
    public class Script_0 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            IFrmMantenimientos lFrm = (IFrmMantenimientos)gCn.AhoraProceso("NewFrmMantenimiento", out _, gCn);
            lFrm.NombreForm = "Pers_frmMant_Idiomas";
            ICntGridUsuario lGrid = lFrm["Idiomas"];
            lGrid.Agregar = true;
            lGrid.Editar = true;
            lGrid.Eliminar = true;
            lGrid.CargaObjetos = false;
            lGrid.EditarPorObjeto = false;
            lGrid.GridHeadLines = 2;
            lGrid.AgregaColumna("IdIdioma", 133, "Id.Idioma", false);
            lGrid.AgregaColumna("Descrip", 133, "Descripción", false);
            lGrid.AgregaColumna("Icono", 30, "I", true, "", false, "", false, "SELECT Id, Icono FROM vPers_Icos", true);
            lGrid.Campo("Icono").FormulaSelect = "SELECT 1";
            lGrid.Campo("IdIdioma").Default = "Select isnull(max(IdIdioma),0) +1 from Idiomas";
            lGrid.From = "Idiomas";
            lGrid.Where = "";
            lGrid.ColumnaEscalada = "Descrip";
            lGrid.OrdenMultiple = "Descrip";
            lGrid.RefrescaSinLoad = true;
            lGrid.Refresca = true;

            lFrm.Form.Text = "Mantenimiento de Idiomas";
            lFrm.Carga(null, false, EBotonesMant.eBotMant_Cerrar);
        }    
    }
}

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo