Netgridcontrol()
Pml Basic 10
NetGridControl 이란?
NetGridControl 은 간단히 말해서 Data를 Grid형태로 만들어주는 역할을 합니다. 폼에 넣어서 데이터를 쉽게 보고 가공할 수 있게 해줍니다.
E3D 기본 DLL로 IMPORT와 같은 몇가지 과정을 거쳐야 합니다.
1. Grid생성방법
1. DLL IMPORT 및 NAMESPACE 선언
GridControl 이라는 DLL안에는 'Aveva.Core.Presentation'이라는 Namespace포함되어 있으며 이 네임스페이스 내에서 NetGridControl 및 NETDATASOURCE 클래스를 사용할 수 있습니다.
그렇기에 E3D에서 DLL을 import 하고 import 'GridControl'
namespac를 선언해야지using namespace 'Aveva.Core.Presentation'
NetGridControl 및 NETDATASOURCE를 사용이 가능합니다.
import 'GridControl'
handle ANY
endhandle
using namespace 'Aveva.Core.Presentation'2. GRID 생성
우선 GRID를 생성해 줍시다.
!grid = object NETGRIDCONTROL()3. Heading(열 제목) 와 Data(행 데이터) 생성
Headings의 경우 1차원배열로 Data 의 경우 2차원 배열로 생성되어야 합니다.
!Headings = object array()
!Headings.append('Heading1')
!Headings.append('Heading2')
!Data = object array()
!Data[1][1] = 'Row1_Col1'
!Data[1][2] = 'Row1_Col2'
!Data[2][1] = 'Row2_Col1'
!Data[2][2] = 'Row2_Col2'3. NETDATASOURCE 를 이용한 데이터 바인딩
GRID에 데이터를 넣기 위해서는 Heading(열 제목) 와 Data(행 데이터) 를 이용하여 NETDATASOURCE를 생성하고 NETDATASOURCE 를 grid 에 바인딩 시켜줘야합니다.
NETDATASOURCE(|임의텍스트|,Heading,Data) 와 같은 구조로 되어있으며 grid 의 bindToDataSource라는 함수를 이용하여 바인딩 합니다.
!nds = object NETDATASOURCE('GridControl', !Headings, !Data)
!grid.bindToDataSource(!nds)이렇게 하나의 Grid 가 완성이 됩니다.
이제 Grid의 각종 메쏘드들을 이용하여 Form안에 들어가있는 grid를 수정하고 가공하던, Grid를 이용하여 데이터를 엑셀로 뽑는 등등 작업을 할 수 있습니다.
2. FORM 안에서의 GRID 설정
1. FORM에 GRID 넣는방법
우선 코드부터 보여드리겠습니다
Import 'GridControl'
handle Any
endhandle
KILL !!gridformtest
layout form !!gridformtest
Title 'Grid'
frame .gridtest
using namespace 'Aveva.Core.Presentation'
Container .Gridinform nobox PmlNetControl 'Table items' At X0 YMax Width 63 Height 10
member .gridCtrl is NETGRIDCONTROL
exit
define method .gridformtest()
using namespace 'Aveva.Core.Presentation'
!this.gridCtrl = object NetGridControl()
!this.Gridinform.control = !this.gridCtrl.handle()
!this.gridCtrl.fixedHeaders(TRUE)
!this.gridCtrl.fixedRows(TRUE)
!this.gridCtrl.columnExcelFilter(TRUE)
!this.gridCtrl.outlookGroupStyle(TRUE)
!this.gridCtrl.editableGrid(TRUE)
!this.gridCtrl.singleRowSelection(FALSE)
!this.gridCtrl.setAlternateRowColor('WHITE')
!Headings = object array()
!Headings.append('Heading1')
!Headings.append('Heading2')
!Data = object array()
!Data[1][1] = 'Row1_Col1'
!Data[1][2] = 'Row1_Col2'
!Data[2][1] = 'Row2_Col1'
!Data[2][2] = 'Row2_Col2'
!Data[3][1] = 'Row3_Col1'
!Data[3][2] = 'Row3_Col2'
!nds = object NETDATASOURCE('GridControl', !Headings, !Data)
!this.gridCtrl.bindToDataSource(!nds)
endmethod- Grid 생성
해당 부분에서 Grid를 포함할 수 있는 컨테이너와
Container .Gridinform nobox PmlNetControl 'Table items' At X0 YMax Width 63 Height 10
Grid를 생성해
member .gridCtrl is NETGRIDCONTROL
2. Form 안에 Grid 넣기
pml 내에서 from 이름과 같은 Method는 폼 로드시 실행되기 떄문에 이 부분에 초기 설정들이 들어가
define method .gridformtest()
using namespace 'Aveva.Core.Presentation'
!this.gridCtrl = object NetGridControl()
!this.Gridinform.control = !this.gridCtrl.handle()즉 !this.Gridinform.control = !this.gridCtrl.handle() 를 통해 Grid정보를 을 Form 에 넣어줘
그 외 나머지는 Grid에 대한 설정이야 아래서 별도로 설명할게
2. FORM과 관련된 GRID 옵션
그리드 설정 옵션
!this.ngc = object NETGRIDCONTROL()
!this.ngc.SingleSelection(false) -- 다중 선택 가능 여부 설정
!this.ngc.FixedHeaders(false) -- 열 고정 설정
!this.ngc.FixedRows(false) -- 행 고정 설정
!this.ngc.EditableGrid(false) -- 그리드 내 데이터 편집 가능 여부
!this.ngc.HeaderSort(true) -- 헤더 클릭 시 정렬 가능 여부 설정SingleSelection(false): 그리드에서 다중 선택이 가능하도록 설정합니다.FixedHeaders(false): 열을 가로로 스크롤할 때 헤더를 고정할지 여부를 설정합니다.FixedRows(false): 행을 세로로 스크롤할 때 고정할지 여부를 설정합니다.EditableGrid(false): 그리드 내 데이터를 직접 편집할 수 있도록 설정합니다.HeaderSort(true): 헤더 클릭 시 해당 열을 기준으로 데이터가 정렬됩니다.
이벤트 핸들러
그리드에서 발생하는 이벤트에 대해 핸들러를 추가할 수 있습니다. 예를 들어, 셀을 클릭했을 때, 셀 업데이트 후 실행되는 명령을 지정할 수 있습니다.
!this.ngc.AddEventHandler('OnPopup', !this, 'Popuphandler')
!this.ngc.AddEventHandler('AfterSelectChange', !this, 'Gridsel')
!this.ngc.AddEventHandler('AfterCellUpdate', !this, 'Update')OnPopup: 마우스 우클릭 시 실행됩니다.AfterSelectChange: 그리드에서 선택한 행이 변경되었을 때 실행됩니다.AfterCellUpdate: 셀 값이 수정된 후 실행됩니다.
데이터 초기화
그리드의 데이터를 초기화하거나 특정 행, 열 데이터를 조작할 수 있습니다.
!this.ngc.ClearGridData() -- 데이터만 초기화
!this.ngc.ClearGrid() -- 헤더와 데이터 모두 초기화행 및 열 데이터 추가/삭제
!this.ngc.AddRow(!rowData) -- 새로운 행 추가
!this.ngc.DeleteSelectedRows() -- 선택된 행 삭제
!this.ngc.SetCellValue(행번호, 열번호, 값) -- 특정 셀 값 설정3. 데이터 엑셀로 내보내기
그리드 데이터를 엑셀 파일로 저장할 수 있습니다. 이 기능을 통해 데이터를 외부로 내보내는 작업이 간편해집니다.
!grid.saveGridToExcel('C:\path\to\file.xlsx')엑셀로 데이터를 저장할 때 .xlsx 형식으로 저장되며, 스타일이나 셀 병합 정보는 엑셀로 내보낼 때 포함되지 않습니다.
Grid 를 이용한 엑셀로 데이터 추출 예시
import 'GridControl'
handle ANY
endhandle
using namespace 'Aveva.Core.Presentation'
!grid = object NETGRIDCONTROL()
!Headings = object array()
!Headings.append('NAME')
!Headings.append('SPEC')
!Data = object array()
!Data[1][1] = 'PIPE1'
!Data[1][2] = 'SPEC1'
!Data[2][1] = 'PIPE2'
!Data[2][2] = 'SPEC2'
!nds = object NETDATASOURCE('GridControl', !Headings, !Data)
!grid.bindToDataSource(!nds)
!grid.saveGridToExcel('C:\output\gridData.xlsx')