Criando uma Grade no AdvPl

Tive bastante dificuldade para criar um grid em AdvPl, com muito esforço consegui.

A MSGetDados() é o componente mais utilizado para a construção de grids de
digitação/exibição. Algumas das propriedades são:

  • Inclusão, alteração e exclusão de linhas
  • Inclusão de número sequencial automático (identificador de item)
  • Considera os tipos de campos e suas propriedades (calculadora para números, calendários para datas, listas de opções, F3-pesquisa em outras tabelas etc)
  • Validação por linha e validação após todo o preenchimento
  • Aplicação das propriedades dos campos de dicionário (x3_valid, x3_cbox, x3_f3 etc) e permite o uso de gatilhos (SX7).
#Include "PROTHEUS.CH"//--------------------------------------------------------------/*/{Protheus.doc} MFGRadeDescription@param xParam Parameter Description@return xRet Return Description@author  - Maria Camila Lijó@since 10/5/2012/*///--------------------------------------------------------------User Function MFGRade()Static oDlg  DEFINE MSDIALOG oDlg TITLE "Grade em AdvPl" FROM 000, 000  TO 500, 500 COLORS 0, 16777215 PIXEL    fMSNewGetDados1()    // Don't change the Align Order    oMSNewGetDados1:Align := CONTROL_ALIGN_BOTTOM  ACTIVATE MSDIALOG oDlgReturn//------------------------------------------------Static Function fMSNewGetDados1()//------------------------------------------------Local nXLocal aHeaderEx := {}Local aColsEx := {}Local aFieldFill := {}Local aFields := {"Teste 1"}Local aAlterFields := {"TESTE_1"}Static oMSNewGetDados1  // Define field properties  DbSelectArea("SX3")  SX3->(DbSetOrder(2))  For nX := 1 to Len(aFields)    If SX3->(DbSeek(aFields[nX]))      Aadd(aHeaderEx, {AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,SX3->X3_TAMANHO,SX3->X3_DECIMAL,SX3->X3_VALID,;                       SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,SX3->X3_CBOX,SX3->X3_RELACAO})    Endif  Next nX  // Define field values  For nX := 1 to Len(aFields)    If DbSeek(aFields[nX])      Aadd(aFieldFill, CriaVar(SX3->X3_CAMPO))    Endif  Next nX  Aadd(aFieldFill, .F.)  Aadd(aColsEx, aFieldFill)  oMSNewGetDados1 := MsNewGetDados():New( 115, 000, 250, 250, GD_INSERT+GD_DELETE+GD_UPDATE, "AllwaysTrue", "AllwaysTrue", "+Field1+Field2", aAlterFields,, 999, "AllwaysTrue", "", "AllwaysTrue", oDlg, aHeaderEx, aColsEx)Return

Queremos saber sua opinião