Como utilizar a PriGrelha do SDK em modo de edição?
O SDK é uma biblioteca de padrões e de controlos de negócio para o ambiente PRIMAVERA, que disponibiliza um conjunto de componentes de forma a oferecer às aplicações terceiras o mesmo nível de funcionalidades e experiência de utilização do ERP. No desenvolvimento de aplicações de negócio é recorrente a utilização de grelhas para a introdução de dados. Dependendo do contexto de utilização, pode ser necessário implementar algumas funcionalidades existentes no ERP, como por exemplo o drilldown, a impressão, a configuração de colunas, entre outras. Nestes casos recomenda-se a utilização da grelha disponibilizada no SDK, uma vez que permite abstrair as equipas de desenvolvimento das implementações referidas, de modo a permitir focar no negócio do cliente. Nos passos seguintes indicamos como configurar a grelha para contexto de introdução de dados. Passo 1 - Inicializações Em primeiro lugar, é necessário proceder à inicialização do contexto do SDK. Para obter mais informações, deverá consultar o artigo "Como utilizar os controlos SDK do ERP PRIMAVERA?." Para utilizar a PriGrelha em modo de consulta, por exemplo numa exploração, sugere-se a consulta do artigo "Como utilizar a PriGrelha do SDK do ERP PRIMAVERA?" O processo de inicialização em modo de edição é semelhante e serão explicadas, posteriormente, as diferenças entre a utilização da PriGrelha em modo de consulta ou em modo de edição. Passo 2 - Definição das colunas e propriedades A grelha, quando iniciada em modo de consulta, não apresenta o mesmo comportamento que no modo de edição, pelo que deverá ter em consideração algumas propriedades na definição das colunas. De igual forma, deverá ter particular atenção na definição do tipo de coluna, uma vez que existe uma relação de dependência entre o tipo de coluna e os dados introduzidos nas células. Deverá também ter em atenção algumas propriedades da grelha, nomeadamente à propriedade que define o modo de edição. Propriedades das colunas Tipos de colunas Propriedades da grelha Células do tipo ComboBox As células do tipo ComboBox requerem um tratamento especial por necessitarem de carregar os itens a mostrar na combo. Assim, ao definir as colunas, no método AddColKey deverá indicar os itens da combo através do argumento ComboValores. O seguinte exemplo mostra como poderá carregar os itens "Cliente", "Fornecedor" e "Outro Terceiro" para a combo, na coluna em que se pretende que o utilizador escolha o tipo de entidade: Para ler o valor do item selecionado deverá usar o método normal de leitura de um valor de uma célula, sendo que o valor lido corresponde ao índice da seleção. O seguinte exemplo mostra a leitura do valor e a conversão do mesmo para o tipo de entidade conhecido: Para atribuir um valor a uma célula deste tipo, deverá ser usado o método nativo da grelha, sendo que o valor deve ser o do próprio item da combobox: Passo 3 - Leitura e escrita de valores Método para ler um valor de uma célula: Método para escrever um valor numa célula: Passo 4 - Invocar as listas nas linhas através do F4 O seguinte exemplo mostra como é apresentada a lista dos artigos quando se pretende selecionar um artigo específico. Deverá invocar uma lista a partir do evento KeyDown da grelha. Quando uma lista é invocada, o AbreLista recebe por argumento o form, a grelha, a coluna e a linha atual. Assim, ao invocar a lista através do F4, o sistema regista o item selecionado pelo utilizador no campo da janela anterior. O valor é inserido na grelha e, caso exista, é invocado automaticamente o método F4RowFileds. Neste método deverá inserir o código necessário para ser executado quando um item da lista é selecionado. Passo 5 - Evento EditMode O evento EditMode é ativado quando o utilizador entra em modo de edição numa célula, assim como quando o finaliza. Deverá efetuar o mesmo procedimento da tecla F4, isto é, validar o valor introduzido, preencher outros dados relacionados, entre outros. Passo 6 - Outros métodos e eventos da grelha a ter em consideração Métodos Eventos Poderá encontrar aqui um exemplo completo de como usar a PriGrelha em modo de edição.Configurar grelhas
Bloqueada Indica se as células estão bloqueadas para edição. ValorMinimo Valor mínimo que cada célula da coluna pode assumir (aplicável a células numéricas). ValorMaximo Valor máximo que cada célula da coluna pode assumir (aplicável a células numéricas). CasasDecimais N.º de casas décimais. EditLen Tamanho de escrita das células (aplicável a células de texto). ComboValores Valores para os itens das células do tipo "combobox" (explicado mais em baixo). CellTypeDate Para células que aceitaram valores referentes a datas. CellTypeEdit Para células que aceitaram texto livre. CellTypeStaticText Para células que mostram texto livre, mas não editável. CellTypeInteger Para células que aceitaram valores numéricos inteiros. CellTypeFloat Para células que aceitarão valores núméricos decimais. CellTypeComboBox Células formatadas com combobox. CellTypeCheckBox Células formatadas com checkbox. PermiteEdicao Indica se a grelha está em modo de edição (true). PermiteAgrupamentosUser Em modo de edição não existem agrupamentos (false). PermiteDataFill Em modo de edição o carregamento da grelha nunca é por DataBind (false). PermiteFiltros Em modo de edição os filtros também não estão ativos (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 Insere n linhas a partir da posição indicada. RemoveLinhas Remove n linhas a partir da posição indicada. AdicionaLinhasBrancoGrelhaEdicao Adiciona 50 linhas às linhas existentes para que sejam editáveis. FormataLinhaEdicao Formata todas as colunas de uma linha para edição. GRID_InsereLinhaEdicao Insere uma linha para edição. GRID_RemoveLinhaEdicao Remove uma linha de edição. Grid_BloqueiaColuna Bloqueia/desbloqueia uma ou mais células. Grid_BloqueiaLinha Bloqueia/desbloqueia as células de uma ou mais linhas. Grid_CelulaBloqueada Indica se a célula está bloqueada. Grid_EscondeLinha Esconde/mostra uma ou mais linhas. Grid_LimpaParteDaGrelha Limpa uma ou mais células. Grid_SetActiveCell Posiciona o cursor numa célula da grelha. PosicionaCelulaAnterior Posiciona o cursor na célula anterior. PosicionaCelulaSeguinte Posiciona o cursor na célula seguinte. AntesInserirLinha Ocorre antes do GRID_InsereLinhaEdicao() AntesRemoverLinha Ocorre antes do GRID_RemoveLinhaEdicao() LinhaInserida Ocorre depois do GRID_InsereLinhaEdicao() LinhaRemovida Ocorre depois do GRID_RemoveLinhaEdicao()
login para deixar a sua opinião.