Vb.net 导出在DataGridView中可见等于True的字段

Vb.net 导出在DataGridView中可见等于True的字段,vb.net,linq,csv,datagridview,export-to-csv,Vb.net,Linq,Csv,Datagridview,Export To Csv,我找到这篇关于的帖子,我想知道是否有人知道如何导出只可见的字段=True 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)()

我找到这篇关于的帖子,我想知道是否有人知道如何导出只可见的字段=True

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

获取数组中的可见列,然后可以使用该列筛选标题和行单元格:

   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")

如果有不可见的列,只需将该列的测试添加到2个查询中即可。请阅读并使用@Proputinix,您能解释更多吗?仍然困惑