Ú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); } } }