Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Tip για Repeater και Page Break

Îåêßíçóå áðü ôï ìÝëïò DeClen. Τελευταία δημοσίευση από το μέλος DeClen στις 16-03-2007, 13:30. Υπάρχουν 0 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-03-2007, 13:30 26509

    Tip για Repeater και Page Break

    Παιδία καλημέρα,

    Δουλέυω πάνω σε μια 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, είπα με τη σειρά μου να γράψω κάτι που ίσως φανεί χρήσιμο σε κάποιους. Smile

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems