2017-08-14 8 views
0

J'ai trouvé cet article sur DataGridView to CSV File et je me demande si quelqu'un sait comment exporter des champs qui ne sont que Visible = Vrai?Exporter les champs qui sont visibles égal à True dans DataGridView

Private Sub ExportCSVButton_Click(sender As Object, e As EventArgs) Handles ExportCSVButton.Click 
     Dim headers = (From header As DataGridViewColumn In PadGridView.Columns.Cast(Of DataGridViewColumn)() 
         Select header.HeaderText).ToArray 
     Dim rows = From row As DataGridViewRow In PadGridView.Rows.Cast(Of DataGridViewRow)() 
        Where Not row.IsNewRow 
        Select Array.ConvertAll(row.Cells.Cast(Of DataGridViewCell).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, "")) 
     Using sw As New IO.StreamWriter("export.csv") 
      sw.WriteLine(String.Join(",", headers)) 
      For Each r In rows 
       sw.WriteLine(String.Join(",", r)) 
      Next 
     End Using 
     Process.Start("export.csv") 
End Sub 
+0

Si vous avez des colonnes qui ne sont pas visibles, il suffit d'ajouter un test pour cette aux 2 requêtes. S'il vous plaît lire [demander] et prendre le [tour] – Plutonix

+0

@Plutonix serez-vous en mesure d'expliquer plus? Toujours confus –

Répondre

0

Obtenez les colonnes visibles dans un tableau, vous pouvez l'utiliser pour filtrer les en-têtes et les cellules de ligne:

Dim visibleColumns = (From header As DataGridViewColumn In PadGridView.Columns.Cast(Of DataGridViewColumn)() 
        Where header.Visible 
        Select header.Index).ToArray 

    Dim headers = (From header As DataGridViewColumn In PadGridView.Columns.Cast(Of DataGridViewColumn)() 
        Where visibleColumns.Contains(header.Index) 
        Select header.HeaderText).ToArray 

    Dim rows = From row As DataGridViewRow In PadGridView.Rows.Cast(Of DataGridViewRow)() 
       Where Not row.IsNewRow 
      Select Array.ConvertAll((From x In row.Cells.Cast(Of DataGridViewCell).ToArray Where visibleColumns.Contains(x.ColumnIndex)).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, "")) 

    Using sw As New IO.StreamWriter("export.csv") 
     sw.WriteLine(String.Join(",", headers)) 
     For Each r In rows 
      sw.WriteLine(String.Join(",", r)) 
     Next 
    End Using 

    Process.Start("export.csv") 
+0

Merci @ Chase-Rocker –