+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

Nascondere colonne datagridview per la stampa

  1. #1
    SanzWeb non è in linea Novello
    Buongiorno a tutti del Forum e buon lunedì.

    Ho questo quesito da porvi.

    Ho necessità di stampare una datagridview. Nella form a video questa è popolata da datasource, ma nascondo due campi con 2 indici inutili per l'utente finale con DGordini.Columns(0).Visible = False e DGordini.Columns(1).Visible = False.

    Quando mando in esecuzione la stampa e devo scorrere le colonne del datagridview lo faccio con For Each.. e per questo mi manda in stampa ovviamente anche le colonne nascoste...

    La domanda è quindi: riesco lo stesso a mettere nel for each qualcosa che gli dica di non stampare le prime 2 colonne? o è sbagliato l'approccio.

    Grazie per i vostri suggerimenti.
    Ho evidenziato a metà con asterischi il ciclo For Each dove viene inviata la stampa della gridview

    Private Sub Stampadettaglio(e)
    
            'Coordinata X della posizione delle celle della griglia
            Dim posX As Integer
    
            'Coordinata Y della posizione delle celle della griglia
            Dim posY As Integer = 150
    
            'Rettangolo grafico che rappresenta una cella della griglia
            Dim Rettangolo As Rectangle
    
            'Altezza di una cella
            Dim Altezza As Integer = DGORDINI.RowTemplate.Height
    
            'Impostazione del Font per le celle
            Dim NormalFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Regular)
    
            'Impostazione del Font per le Intestazioni
            Dim BoldFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Bold)
    
            'Contatore delle righe che sono state stampate
            Static righeStampate As Integer = 0
    
            'Contatore delle pagine che sono state stampate
            Static pagineStampate As Integer = 0
    
            'Numero di righe totali da stampare
            Dim righeTotali As Integer = DGORDINI.Rows.Count
    
            'Numero di righe che possono essere stampate in una pagina
            Dim righePerPagina As Integer = e.MarginBounds.Height / Altezza
    
            'Numero di pagine totali da stampare
            Dim nPagine As Integer
    
            'Definisce il corretto numero di pagine totali da stampare
            If righeTotali Mod righePerPagina > 0 Then
                nPagine = (righeTotali \ righePerPagina) + 1
            Else
                nPagine = (righeTotali \ righePerPagina)
            End If
    
            'Calcola la X iniziale per centrare la tabella nella pagina
            'La dimensione della DataGridView è uguale a 1120=40+300+300+60+120+100+80+120
    
            posX = 35 '(e.MarginBounds.Width - 996) / 2 + e.MarginBounds.Left
    
            'Dimensione del testo contenuto nella cella 
            Dim dimensioneCella As System.Drawing.SizeF
    
            'Spazio da aggiungere alla coordinate X affinché il testo nella cella risulti centrato
            Dim incremento As Integer
    
            'Disegno Intestazioni Tabella
            For Each colonna As DataGridViewColumn In DGORDINI.Columns
    
    
                dimensioneCella = e.Graphics.MeasureString(colonna.HeaderText.ToString, NormalFont)
                incremento = (colonna.Width - dimensioneCella.Width) / 2
    
                'Definisce il rettangolo da disegnare
                Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                'Disegna il rettangolo
                e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                'Scrive l’intestazione della colonna
                e.Graphics.DrawString(colonna.HeaderText, BoldFont, Brushes.DarkRed, posX + incremento, posY + 5)
                posX += colonna.Width
            Next
            posY += Altezza
    
            'Testo da inserire nelle celle della tabella
            Dim testo As String
    
            'Disegna e riempe tutte le celle della tabella
            For i As Integer = righeStampate To righeStampate + righePerPagina - 2
                posX = 35 '(e.MarginBounds.Width - 996) / 2 + e.MarginBounds.Left
    
                'Se le righe stampate sono tutte interrompe il ciclo For…Next
                If i = righeTotali - 1 Then
                    e.HasMorePages = False
                    Exit For
                End If
    '**********************************************************
                For Each colonna As DataGridViewColumn In DGORDINI.Columns
    
                    testo = DGORDINI.Rows(i).Cells(colonna.Name).Value
                    dimensioneCella = e.Graphics.MeasureString(testo.ToString, NormalFont)
                    incremento = (colonna.Width - dimensioneCella.Width) / 2
                    Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                    'Disegna il rettangolo
                    e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                    'Scrive il dato nella cella
                    e.Graphics.DrawString(testo, NormalFont, Brushes.Black, posX + incremento, posY + 5)
                    posX += colonna.Width
                Next
                righeStampate += 1
                posY += Altezza
    
            Next
    ' **********************************************************
            pagineStampate += 1
    
            'Controlla se vi sono altre pagine da stampare
            If pagineStampate < nPagine Then
                e.HasMorePages = True
                posY = e.MarginBounds.Top
            Else
                e.HasMorePages = False
                righeStampate = 0
                pagineStampate = 0
            End If
    
    
        End Sub
    

  2. #2
    patel45 non è in linea Scolaretto
    prova con
    For Each colonna As DataGridViewColumn In DGORDINI.Columns
      if colonna.Visible = True then
    

  3. #3
    SanzWeb non è in linea Novello
    Grazie Patel45.....effettivamente colonna è una istanza di un tipo DataGridViewColumn e potevo trattare come tale....a volte basta una imbeccata....

    Risolto!

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Excel Macro: Nascondere Colonne
    Da net-addiction nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 17-11-2017, 12:28
  2. Stampa Datagridview con salto pagina per troppe colonne
    Da Senny nel forum Visual Basic .Net
    Risposte: 12
    Ultimo Post: 02-08-2014, 08:02
  3. [VB.NET EE] Blooccare e nascondere colonne ListView
    Da vbrookie nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 09-04-2012, 15:57
  4. Risolto: Nascondere colonne DataGridView
    Da queen nel forum Visual Basic .Net
    Risposte: 7
    Ultimo Post: 15-05-2011, 20:19
  5. Problemi nel nascondere colonne in Excel
    Da elios81 nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 13-04-2008, 18:04