In questi giorni mi è capitato di dover rappresentare più record divisi in n colonne. La cosa è semplice se il numero totale di record è divisibile, senza resti, per il numero di colonne. Ma se invece la divisione ha resto ?
Facciamo un esemio un pò più pratico: ho 11 record da suddividere il 3 colonne; la cosa più ovvia è di infilare nelle prime due colonne 4 record e nella terza 3 record, senza lasciarne nessuno fuori.
Il meccanismo è lo stesso che effettua il DataList per la paginazione di record su più colonne. Questo è un metodo semplice per avere lo stesso risultato ed utilizzarlo in ambiti più ristretti, dove magari l'uso del controllo DataList non è possibile.

C#

public static int[] ItemsOnColumns(int tot, int cols)

{
int[] array = new int[cols];
int rest = 0;
int totInCol = Math.DivRem(tot, cols, out rest);
for(int i=0; i<array.Length; i++)
{
array[i] = totInCol;
}
if(rest != 0)
{
int left = tot - (totInCol * cols);
for(int j=0; j<array.Length; j++)
{
if(left > 0)
{
array[j] += 1;
left--;
}
}
}
}

Con questo metodo, avrete una struttura del tipo:

[numeropagina-1] = record presenti in quella pagina

Quindi nel caso di 11 record in 3 colonne, avremmo:

array[0] = 4
array[1] = 4
array[2] = 3