C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35721] [해결]StringGrid의 내용을 QuickReport에 프린팅하기(Group별로 찍고 싶을때)
앙마 [sky4242] 2106 읽음    2004-06-17 09:59
안녕하세요..몇일 고민끝에 해결했네요..여기서 많은 도움을 받아서 허접하나마 제가 ..고민한내용을 다른사람이 고민하지 않았음 하는맘에서 올려봅니다.

일딴 저는 DB에 있는내용을 쿼리문을 이용해서 부른다음에 각각 연산을 하여..StringGrid에 표시하는 폼을 하나두었고...그 StringGrid의 내용을 QuickReport에 그룹별로 찍고자 하는내용이었는데...어느부분에서 잘못된건지 한 2일은 고생한거 같네염..

여기 Q&A에서도 이런내용이 없는거 같아서 그냥 참조하시라구 올려봅니다.

레포트양식을 만드시구요..거기에 그룹헤드와 디테일 그리고 그룹footer를 올려놓습니다. 헤더는 컴포넌트에 있고요 나머진 QRBAND TYPE를 변경하심 돼구여..이그룹을 반복할수 있도록 만들어 주어야 하는데욤..expression을 사용하면 이그룹을 반복시킬수 있더군요..그런데 DB와 직접적으로 연결하지 않기때문에 ..(제가 가장애먹은부분)
QuickReportNeedData부분에 반복될 데이터의 코딩을 하시구염..
제가 작성한 NeedData부분이예염..StringGrid의 각셀을 계산해서 해당하는부분을 Label에 표시돼도록 하였구요.. 요부분에서 조건을 검색해서..expression을 작성해주시면 됩니다..저는 단순히..비교해서 바로 위에셀하고 비교해서 다른경우만..그룹을 나눴구요..



int    Index_1;

        TQREvResult *QREvResult= new TQREvResult;           //QREvResult 동적생성

        Count=TotalProInformationForm->StringGrid1->RowCount-1;  //스트링그리드 RowCount


            if(Index < Count && Count!=0)
              {
              Index++;         // 밑은 그냥 순차적으로 찍는부분이고요..
              QRLabel8->Caption = TotalProInformationForm->StringGrid1->Cells[0][Index];
              QRLabel9->Caption = TotalProInformationForm->StringGrid1->Cells[1][Index];
              QRLabel7->Caption = TotalProInformationForm->StringGrid1->Cells[2][Index];
              QRLabel11->Caption = TotalProInformationForm->StringGrid1->Cells[3][Index];
              QRLabel12->Caption = TotalProInformationForm->StringGrid1->Cells[4][Index];
                         if(Index!=1 && (TotalProInformationForm->StringGrid1->Cells[0][Index]!=TotalProInformationForm->StringGrid1->Cells[0][Index-1]))  //여기서 그룹을 나눕니다..그룹을 나누고
                             {                              // 싶은부분에 아래 Expression을 첨가
                              Machine_No++;                // 하시면 그룹이 나눠질꺼예염..
                              QREvResult->Kind = resDouble;
                              QREvResult->dblResult = double (Machine_No);
                              this->Functions->UpdateConstant("MACHINE", *QREvResult);
                             }                              // 이상하게 resInt형으로 Type을 설정하면
              MoreData=true;                                //그룹이 나눠지기도 하고 나눠지지 않기도
              }                                             //해서 double형으로 했더니 잘돼네염..
              else                                          // 이유는 저도 잘모르겠음..-0-
              MoreData=false;

        delete QREvResult;

Foot부분에 합산이나 데이터부분을 찍고 싶으시면 FootBandBefore Print에 ..코딩해주시면..그룹별로 스트링그리드의 값을 가져다가 찍으실수 있으실꺼예염..그냥 참조하세여..

Qrband3BeforePrint(GroupFooter)

int    Index_1;
          if(Index!=Count)
          Index_1=Index-1;
          else
          Index_1=Index;

          QRLabel14->Caption = TotalProInformationForm->StringGrid1->Cells[0][Index_1];
          QRLabel16->Caption = TotalProInformationForm->StringGrid1->Cells[8][Index_1];
          QRLabel18->Caption = TotalProInformationForm->StringGrid1->Cells[5][Index_1];
          QRLabel20->Caption = TotalProInformationForm->StringGrid1->Cells[6][Index_1];
          QRLabel22->Caption = TotalProInformationForm->StringGrid1->Cells[7][Index_1];

그리고 preview한다음에 프린트를 하실꺼라면...preview에서는 보이지만 정작 Print하면 보이지 않는데..
이문제는 BeforePrint는 2번호출돼기때문에 여기서 전역변수를 모두 초기화를 시켜주셔야 합니다..그럼 Preview내용을 그대로 프린트 하실수 있습니다.

QuickRepBeforePrint        // 아래와 같이..초기화를 시켜주시면..됩니다.
       
        TQREvResult *QREvResult = new TQREvResult ;
        Index=0;
        Machine_No=0;
        Count=0;

        QREvResult->Kind = resInt;
        QREvResult->intResult = int (Machine_No);
        this->Functions->UpdateConstant("MACHINE", *QREvResult);
        delete QREvResult;

Expression 설정은..
variable에서 edit하시구..저같은 경우는 MACHINE라 했구 ..value는 0으로 주었습니다.  즐프하시고염..틀린거 있음 바로잡아주세여..그럼 ^^

+ -

관련 글 리스트
35721 [해결]StringGrid의 내용을 QuickReport에 프린팅하기(Group별로 찍고 싶을때) 앙마 2106 2004/06/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.