2016-01-19 35 views
14

Sto usando Windows Form per generare identità Card utilizzando C# e Microsoft Report Viewer. Tutto funziona bene, tranne che non sono riuscito a trovare la direzione di ripetizione delle colonne nel visualizzatore di report di Microsoft.Colonna direzione repeat nel visualizzatore di report di Microsoft

scenario attuale

mio rapporto formato della carta è A4. Ogni pagina può visualizzare un massimo di 10 singole carte. Ci sono 2 colonne nella pagina. Ogni colonna mostra 5 carte. Sta generando una carta come mostrato nell'immagine. La direzione di ripetizione della colonna è verticale. Prima elenca 1a colonna (1-5) e quindi elenca la 2a colonna (6-10).

enter image description here

mia esigenza

Voglio che il rapporto direzione di ripetizione colonna sia orizzontalmente come nell'immagine qui sotto. Primo display 1 poi 2 e 3 e 4 e così via.

enter image description here

Perché voglio visualizzare in orizzontale piuttosto che in verticale?

Ciò consentirà di risparmiare la carta. Ad esempio, se l'utente genera 4 carte d'identità solo allora come da scenario attuale, genererà 4 carte nella colonna 1 e l'intero spazio pagina è sprecato perché non posso ri-utilizzare lo spazio a sinistra.

Ripetendo la direzione colonna orizzontalmente, le 4 carte saranno visualizzati come nella colonna 1, carta 1 e 3 e nella colonna 2, scheda 2 e 4 verrà visualizzato. Posso quindi tagliare la carta e riutilizzarla in seguito.

Ho cercato un sacco, ma non sono riuscito a trovare alcuna soluzione. Qualsiasi suggerimento, commento o link sarà utile. Non posso usare altri rapporti. Grazie in anticipo.

+0

Presumo che le tue carte siano righe in un rapporto? In tal caso, potresti pubblicare il codice che genera ogni carta d'identità? – KidCode

risposta

7

Creare una matrice

Definire la fila raggruppamento come

=Ceiling(Fields!CardNo.Value/2) 

Definire il raggruppamento colonna come

=Fields!CardNo.Value Mod 2 

Il vostro progetto relazione sarà simile a questa. Il gruppo esterno viene mostrato a scopo illustrativo ma è possibile eliminarlo.

enter image description here

Ora, quando si esegue il report. Si otterrà il risultato che si sta cercando

enter image description here

Senza alcuna intestazione raggruppamento e piè di pagina. L'output relazione sarà

enter image description here

1

Questo problema può essere visto come problema di mappatura in cui è necessario rimescolare i tuoi articoli come segue:

n -> f(n) 
---------- 
1 -> 1 
2 -> 6 
3 -> 2 
4 -> 7 
5 -> 3 
6 -> 8 
7 -> 4 
8 -> 9 
9 -> 5 
10 -> 10 

n is the original position 
f(n) is the mapped position 

Si può notare che segue un modello come questo:

  1. f(n) = floor(n/2) + 1 se n è strano
  2. f(n) = (10 + n)/2 se n è pari

Th noi, si consiglia di rimescolare l'ordine di mettere i tuoi oggetti in quel modo seguente. Che è dato index della voce 0-9 (a partire da 0 sta seguendo C# numero tipico indicizzatore), si potrebbe fare qualcosa di simile:

index++; 
int newIndex = index % 2 == 0 ? (10 + index)/2 : index/2 + 1; 
newIndex--; 

e si dovrebbe essere in grado di inserire il vostro Cards correttamente.

Nota: senza il codice effettivamente fornito, questo mostra come è possibile risolvere concettualmente il problema.

1

Un'altra risposta. Questo funzionerà con o senza gruppi sui tuoi tavoli.

Posizionare due tabelle una accanto all'altra nel report. Impostare la prima tabella su una query che partizioni partendo dal primo record e saltare per 1. Quindi, impostare la seconda tabella su una query che partizioni partendo dal secondo record saltando di 1.