Class: DetailGrid

@nginstack/web-framework/lib/grid/DetailGrid~ DetailGrid


new DetailGrid()

Grade especializada para ser exibida dentro de um campo de outra Grade.

See:
  • Field

Extends

  • Grid

Members


autoMasterPost :boolean

Define se o post da grade detalhe deve chamar o post da grade master.
Esta propriedade só deve ser utilizada quando os registros exibidos na grade detalhe não são gravados no cache local ou no banco de dados, ou seja, quando os dados da grade detalhe são temporários ou servindo apenas como uma visão alternativa das informações já contidas em um campo da grade master.
Importante: Esta propriedade não deve ser utilizada quando o registro da grade detalhe for gravado no banco de dados com referências à master. O mal uso desta propriedade pode provocar a gravação de dados inconsistentes no banco de dados.

Type:
  • boolean
Default Value:
  • true

masterDeleteAction :number

Indica como a grade mestre deve proceder durante uma exclusão de registro em relação à grade detalhe. Possíveis valores:

  • MasterDeleteAction.ERROR: dispara um erro caso haja registros na detalhe, impossibilitando a deleção do registro mestre;
  • MasterDeleteAction.DELETE: exclui todos os registros da grade detalhe vinculados ao registro mestre;
  • MasterDeleteAction.UNLINK: apenas retira o vínculo entre o registro mestre e os detalhes.
Type:
  • number
See:

maxRecordCount

Número máximo de registros que serão mostrados no modo tableView (modo tabela).

O valor padrão na grade detalhes é 5, metade do valor padrão da grade mestre que é 10. Não é obrigatório este valor ser menor.


onCreateDataSet :Event

Evento que será emitido no momento em que a grade detalhe for necessitar do Dataset. Quando adicionado um listener a este evento, ele será o responsável por preparar o DataSet associado à grade detalhe.

Type:
  • Event
Deprecated:
  • Utilize on('createDataSet', listener).
See:
  • Field#onDefineGrid
Example
// O exemplo abaixo cria um DataSet e retorna para a grid.
 detail.onCreateDataSet.set( function ( detail ) {
   var result = new DataSet();
   result.createField('iKey', 'int64');
   result.createField('iContent','string', 255);
   result.create()
   return result;
 });

onMasterCancel :Event

Evento que será emitido toda vez que ocorrer um cancel na master, útil quando algum campo na master tem influência nos campos da grade detalhe e é necessário desfazer uma alteração ao cancelar.
Importante: se você tentar usar o post da grade detalhe ou coloca-lá em edição nesse método, você nunca conseguirá tirar a grade de edição.

Type:
  • Event
Deprecated:
  • Utilize on('masterCancel', listener).

onMasterDelete :Event

Evento que será emitido toda vez que ocorrer a exclusão de um registro na grade mestre. Seu uso é recomendado para excluir registros da grade detalhe que não façam sentido existir após a exclusão do registro mestre.
Importante: por padrão a grade detalhe registra um listener que implementa o comportamento definido pela propriedade #masterDeleteAction. Substitua os listeners definidos para este evento caso esse não seja o comportamento desejado.

Type:
  • Event
Deprecated:
  • Utilize on('masterDelete', listener).
See:
  • module:@nginstack/web-framework/lib/grid/GridField#masterDeleteAction
Example
detail.onMasterDelete.set(function (detail) {
   var ds = detail.ds;
   while (!ds.eof) {
     ds.del();
   }
 });

onMasterInsert :Event

Evento que será emitido quando ocorrer uma inserção na grade mestre.

Type:
  • Event
Deprecated:
  • Utilize on('masterInsert', listener).
See:
  • module:@nginstack/web-framework/lib/grid/GridField#onDefineGrid
Example
// O exemplo abaixo insere um registro default no dataSet, que estará
 // relacionado com a grid master.
 detail.onMasterInsert.set(function (detail) {
   var gridMaster = detail.parent.parent;
   detail.ds.append([gridMaster.ds.chave, '123446']);
   detail.ds.post();
 });

onMasterPost :Event

Evento que será emitido toda vez que ocorrer um post na grade mestre. Seu uso é recomendado para realizar alguma ação na grade detalhe após o post da Master, mas que ocorra antes do post da grade detalhe.

Este é um evento específico do fluxo de atualização da grade mestre detalhe e deve ser utilizado apenas nos casos em que a montagem dos dados da grade detalhe não são convencionais. Para regras de negócio, prefira utilizar o evento beforePost da grade detalhe.

Importante: neste evento não se deve alterar o estado de edição do dataset da grade detalhe, caso contrário os dados poderão ser gravados sem as validações contidas no evento beforePost ou a grade poderá ficar em constante estado de edição.

Type:
  • Event
Deprecated:
  • Utilize on('masterPost', listener).

onMasterScroll :Event

Evento que será emitido quando ocorrer uma alteração do registro corrente na grade mestre. Seu uso é recomendado para definir um filtro no DataSet da grade detalhe.
Importante: a herança deste evento, fará com que ele obedeça as propriedades do Field detailFieldNames e masterFieldNames.

Type:
  • Event
Deprecated:
  • Utilize on('masterScroll', listener).
See:
  • module:@nginstack/web-framework/lib/grid/GridField#masterFieldNames
  • module:@nginstack/web-framework/lib/grid/GridField#detailFieldNames
Example
// O exemplo abaixo, mostra um caso onde a indexação é feita em uma
 // grade que possui 2 indices.
 detail.onMasterScroll.set(function (detail) {
  //inherited(detail); (opcional)
  var master = detail.parent.parent;
  detail.setRange([master.ds.chave, master.ds.tipo], [master.ds.chave, master.ds.tipo]);
})

Methods


config()

Configuração que deve ocorrer para uma grade detail


del()

Exclui da grade e consequentemente do dataSet o(s) registro(s) selecionado(s) na grade. É executado quando for acionado o botão representado por um "-" na grade. O método executa as seguintes ações em ordem:

  • Os eventos de "beforeChange" do campo que representa a grade detalhe são executados.
  • A grade mestra entra em edição.
  • O registro é excluído.
  • Alterações da grade mestre são efetivadas caso a mesma tenha entrado em edição em virtude da exclusão do registro na grade detalhe.
  • Os eventos de "afterChange" do campo que representa a grade detalhe são executados.

edit()

Coloca em edição a grade detalhe. O método executa as seguintes ações em ordem:

  • Caso grade detalhe já não esteja em edição, os eventos de "beforeChange" do campo que representa a grade detalhe são executados.
  • Caso grade detalhe já não esteja em edição, a grade mestra entra em edição.
  • Grade detalhe entra em edição.

insert()

Insere registro na grade detalhe. É executado quando for acionado o botão representado por um "+" na grade. O método executa as seguintes ações em ordem:

  • Os eventos de "beforeChange" do campo que representa a grade detalhe são executados.
  • A grade mestra entra em edição.
  • O registro é inserido e a grade detalhe entra em edição.

notifyMasterScroll()

Notifica a grade detalhe que a grade mestre encontra-se em um novo registro. Essa notificação dispara a execução dos eventos onBeforeScroll, onMasterScroll e onAfterScroll, permitindo que a grade atualize os seus filtros para exibir apenas os registros detalhes associados ao novo registro da grade mestre.

Events


createDataSet

Evento que será emitido no momento em que a grade detalhe for necessitar do Dataset. Quando adicionado um listener a este evento, ele será o responsável por preparar o DataSet associado à grade detalhe.

Type: GridEvent
Example
// O exemplo abaixo cria um DataSet e retorna para a grid.
 detail.on('createDataSet', function (evt) {
   var result = new DataSet();
   result.createField('iKey', 'int64');
   result.createField('iContent', 'string', 255);
   result.create()
   evt.data = result;
 });

masterCancel

Evento que será emitido toda vez que ocorrer um cancel na master, útil quando algum campo na master tem influência nos campos da grade detalhe e é necessário desfazer uma alteração ao cancelar.
Importante: se você tentar usar o post da grade detalhe ou coloca-lá em edição nesse método, você nunca conseguirá tirar a grade de edição.

Type: GridEvent

masterDelete

Evento que será emitido toda vez que ocorrer a exclusão de um registro na grade mestre. Seu uso é recomendado para excluir registros da grade detalhe que não façam sentido existir após a exclusão do registro mestre.
Importante: por padrão a grade detalhe registra um listener que implementa o comportamento definido pela propriedade #masterDeleteAction. Substitua os listeners definidos para este evento caso esse não seja o comportamento desejado.

Type: GridEvent
Example
detail.replaceListeners('masterDelete', function (evt) {
   while (!evt.data.eof) {
     evt.date.del();
   }
 });

masterInsert

Evento que será emitido quando ocorrer uma inserção na grade mestre.

Type: GridEvent
Example
// O exemplo abaixo insere um registro padrão no dataSet da detalhe, quando for inserido
 // um registro na mestre
 detail.on('masterInsert', function (evt) {
   var ds = ngin.dataset.newSharedDataSet(evt.data);
   ds.append([evt.masterGrid.ds.chave, '123456']);
   ds.post();
 });

masterPost

Evento que será emitido toda vez que ocorrer um post na grade mestre. Seu uso é recomendado para realizar alguma ação na grade detalhe após o post da Master, mas que ocorra antes do post da grade detalhe.

Este é um evento específico do fluxo de atualização da grade mestre detalhe e deve ser utilizado apenas nos casos em que a montagem dos dados da grade detalhe não são convencionais. Para regras de negócio, prefira utilizar o evento beforePost da grade detalhe.

Importante: neste evento não se deve alterar o estado de edição do dataset da grade detalhe, caso contrário os dados poderão ser gravados sem as validações contidas no evento beforePost ou a grade poderá ficar em constante estado de edição.

Type: GridEvent

masterScroll

Evento que será emitido quando ocorrer uma alteração do registro corrente na grade mestre. Seu uso é recomendado para definir um filtro no DataSet da grade detalhe.
Importante: a grade adiciona por padrão um evento que filtra os dados com base nas propriedades module:@nginstack/web-framework/lib/grid/GridField#masterFieldNames e module:@nginstack/web-framework/lib/grid/GridField#detailFieldNames. Executar os eventos já existentes aplicará este filtro. Caso não seja desejado, substitua os eventos definidos utilizando o método #replaceListeners.

Type: GridEvent
Example
detail.replaceListeners('masterScroll', function (evt) {
  var masterData = evt.masterGrid.ds;
  evt.data.setRange([masterData.chave, masterData.tipo], [masterData.chave, masterData.tipo]);
})