Q&A

  • QReport의 rbPageFooter에 대해서....
QReport를 작성중입니다.

PrintPreview로 보면

rbDetail Band에서는 QRDBText 콤퍼넌트의 값이 제대로 나오는데

rbPageFooter Band에서는 QRDBText콤퍼넌트의 값이 다음 사람의 값이 나옵니다.

그러니깐 Detail Band와 PageFooter Band의 값이 일치하지 않습니다.

PageFooter Band에서는 첫번째 사람의 값은 나오질않고 두번째 사람부터 밀려서

값이 나옵니다.

DataSet은 같은 DataSet을 사용합니다.(같은 필드로 테스트 결과입니다.)

무슨 이유인지 답답하네요..



2  COMMENTS
  • Profile
    이재식 2000.02.27 08:00
    양동욱 wrote:

    > QReport를 작성중입니다.

    > PrintPreview로 보면

    > rbDetail Band에서는 QRDBText 콤퍼넌트의 값이 제대로 나오는데

    > rbPageFooter Band에서는 QRDBText콤퍼넌트의 값이 다음 사람의 값이 나옵니다.

    > 그러니깐 Detail Band와 PageFooter Band의 값이 일치하지 않습니다.

    > PageFooter Band에서는 첫번째 사람의 값은 나오질않고 두번째 사람부터 밀려서

    > 값이 나옵니다.

    > DataSet은 같은 DataSet을 사용합니다.(같은 필드로 테스트 결과입니다.)

    > 무슨 이유인지 답답하네요..

    >



    이재식 Wrote :

    안녕하세요?



    류동균님께서 이미 정확한 답변을 해주셨습니다.

    제가 좀 보충설명을 추가하고자 이렇게 글을 씁니다.

    우리가 DetailBand의 BeforePrint와 AfterPrint이벤트를 테스트해보면

    이 이벤트까지는 서로 같은 레코드커서를 가지고 있는 것을 알 수 있습니다.



    즉, DetailBand의 AfterPrint이벤트를 벗어나면 다음 레코드로 커서가

    이동했다고 보시면 될 것입니다.

    그렇기때문에 PageFooter밴드에서는 다음 레코드가 출력이 됩니다.

    만약 레코드개수가 1페이지 분량이 넘어가는 것이 아니라면

    pageFooter밴드에 출력되는 값은 항상 맨 마지막에 있는 레코드가 되겠죠.



    이 문제는 pageFooter밴드에 QRLabel를 올려놓으시고요,

    DetailBand의 afterPrint이벤트에 다음처럼 코딩을 합니다.

    LastPrint

    := Table1(DataSet에 연결된 테이블명).FieldByName('출력할필드명').asString(타입) ;



    그리고, pagefooter의 QRLabel의 onPrint이벤트에 다음처럼.

    value := LastPrint ;



    여기서, LastPrint은 private에 선언된 변수입니다. 가령

    LastPrint : string ;





  • Profile
    류동균 2000.02.27 02:17
    양동욱 wrote:

    > QReport를 작성중입니다.

    > PrintPreview로 보면

    > rbDetail Band에서는 QRDBText 콤퍼넌트의 값이 제대로 나오는데

    > rbPageFooter Band에서는 QRDBText콤퍼넌트의 값이 다음 사람의 값이 나옵니다.

    > 그러니깐 Detail Band와 PageFooter Band의 값이 일치하지 않습니다.

    > PageFooter Band에서는 첫번째 사람의 값은 나오질않고 두번째 사람부터 밀려서

    > 값이 나옵니다.

    > DataSet은 같은 DataSet을 사용합니다.(같은 필드로 테스트 결과입니다.)

    > 무슨 이유인지 답답하네요..

    >



    <답변>



    PageFooter가 처리될때 DataSet의 레코드 포인터가 다음 사람으로 되어있기 때문이죠.

    왜냐하면 Detail Band보다 PageFooter이 나중에 처리가 되니까요.

    이미 Detail밴드 처리시 현재 레코드를 처리하고 레코드 포인터는 다음 레코드로 바뀌게 되었으니까요.

    그래서 다른 방법을 쓰여 하겠죠.