Παιδία καλημέρα,
Δουλέυω πάνω σε μια web εφαρμογή και σε κάποιο σημείο έφτασα και στο κομμάτι των reports. Για το reporting αποφάσισα να χρησιμοποιήσω κάποιες custom μεθόδους. Για την ακρίβεια για κάθε report χρησιμοποίησα κάποιες printer friendly .aspx σελίδες με Repeaters.
Όλα καλά και με την χρήση .css τα πράγματα μπορώ να πω πως ήταν αρκετά εύκολα και γρήγορα. Προέκυψε όμως ένα ζήτημα (...πάντα προκύπτει κάτι!). Για ένα συγκεκριμένο report δημιουργούσα για την κάθε εγγραφή ένα "ψωμωμένο" (...προγραμματιστικός όρος...) σε μέγεθος πινακάκι. Όταν προσπαθούσα να εκτυπώσω την σελίδα κάποια πινακάκια χωρίζονταν στη μέση (η αρχή του στο τέλος μιας σελίδας και το τέλος του στην αρχή της άλλης). Φυσικά οπτικά αυτό ήταν τουλάχιστον άσχημο.
Μου ήρθε λοιπόν η ιδέα να "αναγκάζω" τον εκτυπωτή να αλλάζει σελίδα ανα 3 πινακάκια (υπολογίζοντας πάνω κάτω ότι τόσα πρέπει να υπάρχουν σε κάθε σελίδα). Για να το πετύχω αυτό χρησιμοποίησα ένα trick. Λίγο πριν κλείσω το
</ItemTemplate> tag μέσα στον Repeater πρόσθεσα ένα label χωρίς κείμενο
1 2 3 4 5 6 | <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"> <ItemTemplate> ...data formation here... </asp:Label ID="pageBreaker" runat="server" Text=""> </ItemTemplate> </asp:Repeater> |
Στη συνέχεια στο code behind έγραψα τον παρακάτω κώδικα
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) _ Handles Repeater1.ItemDataBound
'The following code inserts a page break (for printing) every 3 records '======================================================================
Dim myPageBreaker As Label Dim numOfRecord As Integer Dim BreakPageAfter As Integer = 3
'get the iteration number (since the first ItemIndex of Repeater is 0 we add 1) numOfRecord = e.Item.ItemIndex + 1
'find the label with id = pageBreaker myPageBreaker = e.Item.FindControl("pageBreaker")
'justify where page break should be entered If (numOfRecord Mod BreakPageAfter = 0) Then myPageBreaker.Text = "<p style=""page-break-after: always;""></p>" End If
End Sub |
Ουσιαστικά αυτό που γίνεται εδώ πέρα είναι να προσθέτω το css tag
<p style="page-break-after: always;"></p> ανα 3 εγγραφές.
Το trick δούλεψε μια χαρά, και μιας και με έχετε βοηθήσει αρκετά στο forum, είπα με τη σειρά μου να γράψω κάτι που ίσως φανεί χρήσιμο σε κάποιους.