¿Cómo utilizar la PriGrelha del SDK en modo edición?
El SDK es una librería de patrones y controles de negocio para el entorno Cegid, que proporciona un conjunto de componentes para ofrecer a las aplicaciones de terceros el mismo nivel de funcionalidad y experiencia de usuario que el ERP. En el desarrollo de aplicaciones de negocio, es recurrente el uso de grids para la introducción de datos. Dependiendo del contexto de uso, puede ser necesario implementar algunas de las funcionalidades existentes en el ERP, como el drilldown, la impresión, la configuración de columnas y otras. En estos casos se recomienda utilizar la grid proporcionada en el SDK, ya que permite abstraer a los equipos de desarrollo de estas implementaciones, para que puedan centrarse en el negocio del cliente. Los siguientes pasos muestran cómo configurar la grid para el contexto de entrada de datos. Paso 1 - Inicialización En primer lugar, debe inicializarse el contexto del SDK. Para más información, consulte el artículo "¿Cómo utilizar los controles del SDK del ERP Cegid?." Para utilizar la PriGrelha en modo de consulta, por ejemplo en una exploración, le sugerimos que consulte el artículo "¿Cómo utilizar PriGrelha desde el SDK del ERP Cegid?" El proceso de inicialización en modo de edición es similar y posteriormente se explicarán las diferencias entre el uso de la PriGrelha en modo consulta o en modo edición. Paso 2 - Definición de columnas y propiedades Cuando la grid se inicia en modo consulta, no se comporta de la misma manera que en modo edición, por lo que deberá tener en cuenta ciertas propiedades a la hora de definir las columnas. También debe prestar especial atención al definir el tipo de columna, ya que existe una relación de dependencia entre el tipo de columna y los datos introducidos en las celdas. También debe prestar atención a ciertas propiedades de la grid, en particular a la propiedad que define el modo de edición. Propiedades de las columnas Tipos de columna Propiedades de la grid Celdas de tipo ComboBox Las celdas del tipo ComboBox requieren un tratamiento especial porque necesitan cargar los elementos que se mostrarán en el combo. Por lo tanto, al definir las columnas, en el método AddColKey debe indicar los ítems del combo utilizando el argumento ComboValores. El siguiente ejemplo muestra cómo puede cargar los elementos "Cliente", "Fornecedor" y "Outro terceiro" en el combo, en la columna en la que desea que el usuario elija el tipo de entidad: Para leer el valor del ítem seleccionado debe utilizar el método normal de lectura de un valor de una celda, correspondiendo el valor leído al índice de la selección. El siguiente ejemplo muestra cómo leer el valor y convertirlo al tipo de entidad conocido: Para asignar un valor a una celda de este tipo, debe utilizarse el método nativo de la grid, y el valor debe ser el del propio ítem de la combobox: Paso 3 - Lectura y escritura de valores Método para leer un valor de una celda: Método para escribir un valor en una celda: Paso 4 - Invocar las listas en las líneas utilizando F4 El siguiente ejemplo muestra cómo se presenta la lista de artículos cuando desea seleccionar un artículo concreto. Tiene que invocar una lista desde el evento KeyDown de la grid. Cuando se invoca una lista, el método AbreLista recibe como argumento el form, la grid, la columna y la línea actual. Así, cuando se invoca la lista mediante F4, el sistema registra el ítem seleccionado por el usuario en el campo de la ventana anterior. El valor se inserta en la grid y, si existe, se invoca automáticamente el método F4RowFileds. En este método debe insertar el código necesario para que se ejecute cuando se selecciona un elemento de la lista. Paso 5 - Evento EditMode El evento EditMode se activa cuando el usuario entra en modo de edición en una celda, así como cuando lo finaliza. Debe seguir el mismo procedimiento que con la tecla F4, es decir, validar el valor introducido, rellenar otros datos relacionados, etc. Paso 6 - Otros métodos y eventos de la grid a tener en cuenta Métodos Eventos Podrá encontrar aquí un ejemplo completo de cómo utilizar la PriGrelha en modo edición.Configuración de grids
Bloqueada Indica si las celdas están bloqueadas para edición. ValorMinimo Valor mínimo que puede tomar cada celda de la columna (se aplica a las celdas numéricas). ValorMaximo Valor máximo que puede tomar cada celda de la columna (aplicable a celdas numéricas). CasasDecimais N.º de decimales. EditLen Tamaño del texto de las celdas (aplicable a celdas de texto). ComboValores Valores para los ítems de las celdas de tipo "combobox" (se explica más adelante). CellTypeDate Para celdas que aceptan valores referidos a fechas. CellTypeEdit Para celdas que aceptan texto libre. CellTypeStaticText Para celdas que muestran texto libre, pero no editable. CellTypeInteger Para celdas que aceptan valores numéricos enteros. CellTypeFloat Para celdas que aceptan valores numéricos decimales. CellTypeComboBox Celdas formateadas con combobox. CellTypeCheckBox Celdas formateadas con checkbox. PermiteEdicao Indica si la grid está en modo edición (true). PermiteAgrupamentosUser En modo edición no existen agrupaciones (false). PermiteDataFill En el modo de edición, la rejilla nunca se carga mediante DataBind (false). PermiteFiltros En modo edición, los filtros tampoco están activos (false). priGrelha1.AddColKey(colTipoEntidade, FpCellType.CellTypeComboBox, "Tipo Ent.", 8, strComboValores: DaValoresComboTipoEntidade());
private string DaValoresComboTipoEntidade()
{
return
"Clientet" +
"Fornecedort" +
"Outro Terceiro";
}private string GetTipoEntidadeFromGrid(int row)
{
string result = "C";
switch (PSO.Utils.FInt(priGrelha1.GetGRID_GetValorCelula(row, colTipoEntidade)))
{
case 1:
result = "F";
break;
case 2:
result = "O";
break;
default:
break;
}
return result;
}private void SetValorComboboxGrelha(string col, int row, string value)
{
//Actualiza o valor da combo na grelha.
priGrelha1.Grelha.SetText(priGrelha1.Cols.GetEdita(col).Number, row, value);
}priGrelha1.GetGRID_GetValorCelula(row, colNomeColuna);
priGrelha1.SetGRID_SetValorCelula(row, colNomeColuna, "Valor");
private void priGrelha1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.F4 && !e.Control && !e.Shift)
{
TrataF4Linhas(priGrelha1.Grelha.ActiveCol, priGrelha1.Grelha.ActiveRow);
}
return;
}
catch (Exception ex)
{
PSO.Dialogos.MostraErroSimples("Erro ao executar a operação!", StdPlatBS100.StdBSTipos.IconId.PRI_Critico, ex.Message);
}
}
private void TrataF4Linhas(int col, int row)
{
// Artigos
if (col == priGrelha1.Cols.GetEdita(colArtigo).Number)
{
PSO.AbreLista(1, ConstantesPrimavera100.Categorias.Artigo, "Artigo", this, priGrelha1.Grelha, "mnuTabArtigo", row, col, false, "(ArtigoAnulado = 0)");
}
}public void F4RowFields(string Categoria, string NomeCampo, dynamic Valor)
{
try
{
if (Categoria == ConstantesPrimavera100.Categorias.Artigo)
{
TrataColuna_Artigo(priGrelha1.Grelha.ActiveRow);
}
}
catch (Exception ex)
{
PSO.Dialogos.MostraErro("Erro ao carregar o registo.", StdPlatBS100.StdBSTipos.IconId.PRI_Exclama, ex.Message, ex);
}
}
private void TrataColuna_Artigo(int row)
{
try
{
string artigo = PSO.Utils.FStr(priGrelha1.GetGRID_GetValorCelula(row, colArtigo));
if (!string.IsNullOrWhiteSpace(artigo))
{
if (BSO.Base.Artigos.Existe(artigo))
{
BasBEArtigo beArtigo = BSO.Base.Artigos.Consulta(artigo);
priGrelha1.SetGRID_SetValorCelula(row, colArtigo, beArtigo.Artigo.ToUpper());
priGrelha1.SetGRID_SetValorCelula(row, colDescArtigo, beArtigo.Descricao.ToUpper());
}
else
{
throw new Exception("Artigo inexistente!");
}
}
}
catch (Exception ex)
{
priGrelha1.SetGRID_SetValorCelula(row, priGrelha1.Cols.GetEdita(colArtigo).ColKey, string.Empty);
priGrelha1.SetGRID_SetValorCelula(row, priGrelha1.Cols.GetEdita(colDescArtigo).ColKey, string.Empty);
throw ex;
}
}private void priGrelha1_EditMode(object Sender, PriGrelha.EditModeEventArgs e)
{
try
{
if ((e.Mode == 0) && (e.ChangeMade))
{
TrataColuna(e.Col, e.Row);
}
}
catch (Exception ex)
{
PSO.Dialogos.MostraErroSimples("Erro ao executar a operação!", StdPlatBS100.StdBSTipos.IconId.PRI_Critico, ex.Message);
}
}
private void TrataColuna(int col, int row)
{
if ((row > priGrelha1.Grelha.DataRowCnt) || row == 0)
{
return;
}
if (col == priGrelha1.Cols.GetEdita(colArtigo).Number)
{
TrataColuna_Artigo(row);
}
}InsereLinhas Inserta n líneas desde la posición indicada. RemoveLinhas Elimina n líneas desde la posición indicada. AdicionaLinhasBrancoGrelhaEdicao Añade 50 líneas a las líneas existentes para que sean editables. FormataLinhaEdicao Formatea todas las columnas de una línea para su edición. GRID_InsereLinhaEdicao Inserta una línea para su edición. GRID_RemoveLinhaEdicao Elimina una línea de edición. Grid_BloqueiaColuna Bloquea/desbloquea una o varias celdas. Grid_BloqueiaLinha Bloquea/desbloquea las celdas de una o más líneas. Grid_CelulaBloqueada Indica si la celda está bloqueada. Grid_EscondeLinha Oculta/muestra una o más líneas. Grid_LimpaParteDaGrelha Borra una o más celdas. Grid_SetActiveCell Posiciona el cursor en una celda de la grid. PosicionaCelulaAnterior Posiciona el cursor en la celda anterior. PosicionaCelulaSeguinte Posiciona el cursor en la celda siguiente. AntesInserirLinha Ocurre antes de GRID_InsereLinhaEdicao() AntesRemoverLinha Ocurre antes de GRID_RemoveLinhaEdicao() LinhaInserida Se produce después de GRID_InsereLinhaEdicao() LinhaRemovida Se produce después de GRID_RemoveLinhaEdicao()