docs: public boolean printData(PrintWriter out, int iPrintOptions)
      {
          boolean bFieldsFound = false;
          iPrintOptions = this.printStartGridScreenData(out, iPrintOptions);
  
          Record record = this.getMainRecord();
          if (record == null)
              return bFieldsFound;
          int iNumCols = this.getSFieldCount();
  
          int iLimit = DEFAULT_LIMIT;
          String strParamLimit = this.getProperty(LIMIT_PARAM);   // Display screen
          if ((strParamLimit != null) && (strParamLimit.length() > 0))
          {
              try   {
                  iLimit = Integer.parseInt(strParamLimit);
              } catch (NumberFormatException e) {
                  iLimit = DEFAULT_LIMIT;
              }
          }
  
          int iFieldCount = 0;
          for (int i = 0; i < iNumCols; i++)
          {
              if (!(this.getSField(i) instanceof BasePanel))
                  iFieldCount++;
          }
          if (iFieldCount > 0)
          {
              bFieldsFound = true;
              BasePanel scrHeading = this.getReportHeading();
              if (scrHeading != null)
                  scrHeading.printData(out, iPrintOptions | HtmlConstants.MAIN_HEADING_SCREEN);
              
              BasePanel scrDetail = this.getReportDetail();
  
              this.printStartRecordGridData(out, iPrintOptions);
              this.printNavButtonControls(out, iPrintOptions);
  
              // for entire data
              try {
                  boolean bHeadingFootingExists = this.isAnyHeadingFooting();
  
                  record = this.getNextRecord(out, iPrintOptions, true, bHeadingFootingExists);
  
                  while (record != null)
                  {
                      this.printStartRecordData(record, out, iPrintOptions);
  
                      if (bHeadingFootingExists)
                          this.printHeadingFootingData(out, iPrintOptions | HtmlConstants.HEADING_SCREEN | HtmlConstants.DETAIL_SCREEN);
  
                      bFieldsFound = super.printData(out, (iPrintOptions & (~HtmlConstants.HTML_ADD_DESC_COLUMN)) | HtmlConstants.MAIN_SCREEN); // Don't add description
  
                      if (scrDetail != null)
                          scrDetail.printData(out, iPrintOptions | HtmlConstants.DETAIL_SCREEN);
  
                      Record recordNext = this.getNextRecord(out, iPrintOptions, false, bHeadingFootingExists);
  
                      this.printEndRecordData(record, out, iPrintOptions);
                      
                      record = recordNext;
  
                      if (--iLimit == 0)
                          break;  // Max rows displayed
                  }
              } catch (DBException ex)    {
                  ex.printStackTrace();
              }
  
              this.printEndRecordGridData(out, iPrintOptions);
  
              BasePanel scrFooting = this.getReportFooting();
              if (scrFooting != null)
                  scrFooting.printData(out, iPrintOptions | HtmlConstants.MAIN_FOOTING_SCREEN);
          }
  
          this.printEndGridScreenData(out, iPrintOptions);
          return bFieldsFound;
      }