When you are displaying a grid of data using apex panel grids or apex data table components,Let us say we need to display a section heading on the first row and center it. You would use a facet component using apex header facet which would work good. But if you are using apex columns and dynamically rendering text based on condition, the header facet would display in one column instead of the entire row is annoying.
So to solve this problem , populate the columns attribute on your apex datatable or panelgrid so that apex knows the number of columns before hand. This would display the section header on the entire row.