docs: private void loadGrid() {
          if (fetch() == 0) {
              initGrid(0);
              return;
          }
          
          Iterator<String> data = template.iterator();
          String[] pcs = StrUtil.split(data.next(), StrUtil.U, 3);
          int testcnt = StrUtil.toInt(pcs[0]);
          int datecnt = StrUtil.toInt(pcs[1]);
          int datacnt = StrUtil.toInt(pcs[2]);
          
          if (datacnt == 0 || datecnt == 0) {
              // showMessage("No data available within selected range.");
              return;
          }
          
          initGrid(datecnt);
          // Populate test names and units
          for (int r = 0; r < testcnt; r++) {
              addRow();
              pcs = StrUtil.split(data.next(), StrUtil.U, 8);
              String range = pcs[5] + "-" + pcs[6];
              range = "-".equals(range) ? "" : range + " ";
              setValue(0, r, WordUtils.capitalizeFully(pcs[2]), pcs[0]);
              setValue(datecnt + 1, r, range + pcs[4], pcs[4]);
          }
          // Populate date headers
          Map<String, Integer> headers = new HashMap<>();
          
          for (int c = 1; c <= datecnt; c++) {
              pcs = StrUtil.split(data.next(), StrUtil.U, 2);
              FMDate date = new FMDate(pcs[1]);
              Column column = getColumn(c);
              DateTimebox dtb = (DateTimebox) column.getFirstChild();
              dtb.setDate(date);
              headers.put(pcs[0], c);
          }
          // Populate data cells
          for (int i = 0; i < datacnt; i++) {
              pcs = StrUtil.split(data.next(), StrUtil.U, 3);
              int col = headers.get(pcs[0]);
              int row = StrUtil.toInt(pcs[1]) - 1;
              setValue(col, row, pcs[2], pcs[4]);
          }
      }