V10 RecursosReferência
RecursosReferência
Referência
Voltar | Lista de artigos

Como utilizar a PriGrelha do SDK em modo de edição?

Última alteração a 30/09/2021

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.

Configurar grelhas

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

BloqueadaIndica se as células estão bloqueadas para edição.
ValorMinimoValor mínimo que cada célula da coluna pode assumir (aplicável a células numéricas).
ValorMaximoValor máximo que cada célula da coluna pode assumir (aplicável a células numéricas).
CasasDecimaisN.º de casas décimais.
EditLenTamanho de escrita das células (aplicável a células de texto).
ComboValoresValores para os itens das células do tipo "combobox" (explicado mais em baixo).

Tipos de colunas

CellTypeDatePara células que aceitaram valores referentes a datas.
CellTypeEditPara células que aceitaram texto livre.
CellTypeStaticTextPara células que mostram texto livre, mas não editável.
CellTypeIntegerPara células que aceitaram valores numéricos inteiros.
CellTypeFloatPara células que aceitarão valores núméricos decimais.
CellTypeComboBoxCélulas formatadas com combobox.
CellTypeCheckBoxCélulas formatadas com checkbox.

Propriedades da grelha

PermiteEdicaoIndica se a grelha está em modo de edição (true).
PermiteAgrupamentosUserEm modo de edição não existem agrupamentos (false).
PermiteDataFillEm modo de edição o carregamento da grelha nunca é por DataBind (false).
PermiteFiltrosEm modo de edição os filtros também não estão ativos (false).

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:

priGrelha1.AddColKey(colTipoEntidade, FpCellType.CellTypeComboBox, "Tipo Ent.", 8, strComboValores: DaValoresComboTipoEntidade());

private string DaValoresComboTipoEntidade()
{
	return
		"Clientet" +
		"Fornecedort" +
		"Outro Terceiro";
}

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:

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

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:

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

Passo 3 - Leitura e escrita de valores

Método para ler um valor de uma célula:

priGrelha1.GetGRID_GetValorCelula(row, colNomeColuna);

Método para escrever um valor numa célula:

priGrelha1.SetGRID_SetValorCelula(row, colNomeColuna, "Valor");

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.

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

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.

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

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.

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

Passo 6 - Outros métodos e eventos da grelha a ter em consideração

Métodos

InsereLinhasInsere n linhas a partir da posição indicada.
RemoveLinhasRemove n linhas a partir da posição indicada.
AdicionaLinhasBrancoGrelhaEdicaoAdiciona 50 linhas às linhas existentes para que sejam editáveis.
FormataLinhaEdicaoFormata todas as colunas de uma linha para edição.
GRID_InsereLinhaEdicaoInsere uma linha para edição.
GRID_RemoveLinhaEdicaoRemove uma linha de edição.
Grid_BloqueiaColunaBloqueia/desbloqueia uma ou mais células.
Grid_BloqueiaLinhaBloqueia/desbloqueia as células de uma ou mais linhas.
Grid_CelulaBloqueadaIndica se a célula está bloqueada.
Grid_EscondeLinhaEsconde/mostra uma ou mais linhas.
Grid_LimpaParteDaGrelhaLimpa uma ou mais células.
Grid_SetActiveCellPosiciona o cursor numa célula da grelha.
PosicionaCelulaAnteriorPosiciona o cursor na célula anterior.
PosicionaCelulaSeguintePosiciona o cursor na célula seguinte.

Eventos

AntesInserirLinhaOcorre antes do GRID_InsereLinhaEdicao()
AntesRemoverLinhaOcorre antes do GRID_RemoveLinhaEdicao()
LinhaInseridaOcorre depois do GRID_InsereLinhaEdicao()
LinhaRemovidaOcorre depois do GRID_RemoveLinhaEdicao()

Poderá encontrar aqui um exemplo completo de como usar a PriGrelha em modo de edição.

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Características das entidades e serviços Conceito de integração Conceito de extensibilidade Como registar projetos de extensibilidade? Boas práticas de organização de projetos de integração