code: public function renderTableBody()
      {
          $models = array_values($this->dataProvider->getModels());
          $keys = $this->dataProvider->getKeys();
          $rows = [];
          foreach ($models as $index => $model) {
              $key = $keys[$index];
              if ($this->beforeRow !== null) {
                  $row = call_user_func($this->beforeRow, $model, $key, $index, $this);
                  if (!empty($row)) {
                      $rows[] = $row;
                  }
              }
  
              $rows[] = $this->renderTableRow($model, $key, $index);
  
              if ($this->afterRow !== null) {
                  $row = call_user_func($this->afterRow, $model, $key, $index, $this);
                  if (!empty($row)) {
                      $rows[] = $row;
                  }
              }
          }
  
          if (empty($rows) && $this->emptyText !== false) {
              $colspan = count($this->columns);
  
              return "<tbody>\n<tr><td colspan=\"$colspan\">" . $this->renderEmpty() . "</td></tr>\n</tbody>";
          }
  
          return "<tbody>\n" . implode("\n", $rows) . "\n</tbody>";
      }
docs: Renders the table body.
  @return string the rendering result.