DevExpress에서는 열별 Summary를 GroupFooter를 통해 자동 생성을 지원하고 있습니다.

GroupField와 xrTableCell별 DataBinding을 이용하면 쉽게 소계와 합계를 낼 수 있습니다.

 

다만 다음과 같은 상황을 생각해봅시다.

 

[QUNT] [COST] [TLAM]

 

수량[QUNT]과 단가[COST]를 곱해서 결과[TLAM]를 내야 하는데, Detail이나 GroupFooter인 경우, xrTableCell을 기준으로 접근할 수가 없습니다.

왜냐하면, Detail과 GroupFooter는 테이블의 상태에 따라 자동으로 갯수가 변화하게 되는데, 객체 자체는 하나로 계속 유지되기 때문입니다.

그런고로 Event를 잡아서 xrTableCell.Text를 꺼내봐도 아무것도 없으며, String을 넣는다 하더라도 Report에 반영되지 않습니다.

 

먼저는 자동 생성하는 셀 객체를 찾아야 합니다. 그러기 위해서는 먼저 찾고자 하는 셀의 'BeforePrint' Event 메소드를 생성합니다. (속성에서 생성가능)

생성하고 나면 매개변수는 다음과 같습니다.

 

private void xrTableCell_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)

 

sender 오브젝트를 XRTableCell으로 캐스팅하면 라인이 추가로 생성될 때마다 생성되는 Cell을 가져올 수 있습니다.

그래서 예를 들어 다음과 같이 하면 생성될 때마다 Cell에 값을 찍을 수 있습니다.

 

XRTableCell cell = (XRTableCell) sender;

cell.Text = "SomeThing";

 

특정한 값을 가져오기 위해서는 조금 복잡합니다. cell의 Text값은 Print 되기 전에는 빈 값입니다.

그리고 XRTableCell의 내부 변수에는 Value 값이 없습니다. Report에서 보이는 단일 사각형과 관련된 정보(디자인적 요소)만 있다고 생각하시면 됩니다.

그리하여 다음과 같이 돌아가야 특정한 값을 가져올 수 있습니다.

 

XRTableCell cell = (XRTableCell) sender;

XtraReport report = cell.RootReport;

object Value = report.GetCurrentColumnValue("QUNT");

 

위와 같은 상황에서 저 행이 Detail이라면 다음과 같이 매 번 Detail이 생성될 때마다 거기에 현재 찍힐 수량[QUNT] 값을 가져올 수 있습니다.

다만 이의 경우 Summary 등으로 구성된 이름 없는 변수값을 가져올 수가 없습니다.

 

GroupFooter에서 자동으로 Summary된 값을 가져오려면 다음과 같이, cell에 넣어놓은 Summary 메소드를 실행하면 됩니다.

 

XRTableCell cell = (XRTableCell) sender;

object value = cell.Summary.GetResult();

 

다만 이렇게 코딩할 경우, Summary는 구성되어 있지만 값이 없어서 GetResult 결과가 null로 나올 경우, NullPointException 에러가 Print 창에서 발생합니다. 

"개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라고 하며, Debug에서도 잡히지 않습니다.

그런고로 저는 다음과 같이 처리하였습니다.

 

XRTableCell cell = (XRTableCell) sender;

if (cell.Summary.GetResult() == null)

return "SomeErrorThing";

else

return cell.Summary.GetResult();

 

이렇게 구성하시면, 전역변수를 통해 메소드간 데이터를 주고 받고, 행간 수식을 구성하실 수 있습니다.

 

P.S. Summary를 사용하지 않는 행의 경우, RootReport를 통해 아예 현재의 Row을 가져오는 방법도 있습니다. (GroupFooter이기 때문에 이렇게 복잡합니다.)

다음과 같이 짜면, Row를 바로 가져와 내부 행들을 쓸 수 있습니다. (Detail의 경우)

 

XRTableCell cell = (XRTableCell) sender;

XtraReport report = cell.RootReport;

DataRowView currentRow = (DataRowView) report.GetCurrentRow();

object[] rowItem = currentRow.Row.ItemArray;

 

//cell.text = (decimal) rowItem[1] * (decimal) rowItem[2]

Git을 실무 적용된 상태로 배울 수 없어서 당혹스러운 과정들을 거치고 있는데, 초보더라도 그 과정들을 기록해보자 한다.

 

- 일단 범용 컴퓨터라 Git GUI와 Git BASH가 설치되어 있었다. 

- 그런고로 저장소를 만들고 싶은 폴더에서 오른쪽 버튼을 누르면, 그 경로에서 GUI나 BASH(cmd)를 실행할 수 있었다.

 

- git은 저장소 폴더의 '.git' 폴더 내에 모든 정보가 담겨 있으므로 연습하다가 두려우면 그 폴더를 삭제하면 깔끔하게 제거된다.

- git을 그렇게 삭제하는 것 외에 제거하는 것은 상당히 어렵다고 한다. ( 잘 모름 )

- 폴더에서 '숨겨진 파일 표시'를 하면 콤마로 시작하는 파일들도 전부 보여 무언가 잘못 될 때의 두려움이 해소되었다.

 

- 다음에는 git을 구성할 때 들어가는 용량과 부하가 걱정되었다.

- 아무 생각 없이 변환된 모든 파일을 읽어들이고 기록한다면, 릴리즈, 디버그 빌드 dll 등 몽땅 기록될 것이다.

- 그래서 알아보니 git ignore라는 설정을 넣으면 특정 이름의 폴더나 특정 속성의 파일들을 기록하지 않는다.

- C# ignore라고 검색했을 때 나오는 것을 기준으로 작성하였다.

 

- 당황하지 말고, 다른 분들의 도움을 받아 만들자.

- 여기서 당황했던건 C# ignore의 내용을 붙여넣어야 하는데, Vim 화면에서 Ctrl-V가 안 된다.

- git BASH 상에서 오른쪽 클릭을 하여 PASTE로 붙여넣거나, Shift+Insert를 하면 붙여넣기가 가능하다.

 

- 또한 ignore 파일을 만든 즉시 다른 설정을 해줄 필요 없이 바로 적용된 상태가 된다. ( 이것도 당황 )

- 그럼 이제 Commit을 진행하면 걱정했던 것들은 제외하고 저장이 된다.

 

- 그리고 Git을 따로 공부할 때 개인적으로 가장 혼란스러웠던 것은 checkup등 master의 위치가 무엇을 의미하느냐였다.

- 처음부터 이해하기 전까지는 master가 일종의 포인터라고 생각했고, 지시 위치를 변경한다고 생각했다.

- 그렇기 때문에 먼저 포인터를 이동시키고, 다른 조작어를 통해 포인터가 지시하는 파일의 형태로 변경한다 착각했다.

- 그러나 포인터와 실제 파일이 일치하는 상태이며, 이동 즉시 현재 저장소의 파일들은 모두 변경된다.

- 이런 혼동이 정리된 이후는 좀 더 잘 파악할 수 있게 되었다. ( 레퍼런스 형태가 아니라니. )

 Windows 8.1 버젼에서 디스크 정리를 관리자 권한으로 실행시켰을 때, Windows Update 파일이 상당한 용량을 따로 나올 때가 있다. ( 나의 경우 약 12GB ) 삭제한다고 체크하고 확인을 눌러도, 삭제되지 않는다. ( 다시 검색했을 때 똑같은 용량으로 다시 등장하며, 마치 디스크 에러인 것처럼 보인다. )

 

 여기서 나는,

  • Dism.exe를 활용한 Windows image 오류 문제로 접근
  • SFC.exe를 활용한 시스템 파일 오류로 접근
  • 디스크 정리의 권한 문제로 접근
  • chkdisk를 통한 디스크 오류 문제로 접근

등을 진행해 봤으나 그 무엇으로도 해결되지 않았다.

 

 그래서 나는 (아마 제일 처음 진행했어야 할) 트리 구조로 C: 용량을 시각화하는 프로그램을 사용하여, 실제 프로그램들의 문제를 확인해보았다. 그랬더니, C: 에서 hiberfil.sys와 pagefile.sys가 엄청난 부분을 차지하고 있는 것을 확인하게 된다. ( 특히 신기하게도 hiberfil.sys가 정확히 12GB로 문제가 되는 Windows Update 파일 용량과 일치하였다.

 

 pagefile.sys의 용량을 조절하려면 가상 메모리 설정을 변경하면 되며, hiberfil.sys의 용량을 조절하려면 절전 모드 설정을 변경하면 된다. ( 관리자 권한 명령프롬포트에서 POWERCFG -H OFF ) ( 저 명령어가 수행하는 게 무엇인지 확인해야 된다. )

 

  정확한 병명을 확인하기 위한 절차에서 치료 요법을 통해 문제를 해결하기 보다는, 진료를 우선해야 한다는 경험이었다. 아무래도 모종의 이유로 저 sys 파일이 디스크 정리에서 정확한 명칭으로 지칭되지 못하고, Windows Update 파일로 잡히는 에러가 모두를 미로로 향하게 만들었다. ( Dism.exe 로 시스템 업데이트 관리를 계속 확인하게 된 요인 )

 

------

Disk Cleanup does not delete windows update files Solved.

-> Check your hiberfil.sys and pagefile.sys in C:.

+ Recent posts