我正在研究抓取程式,抓取專案后我的程式的下一步是從 datagridview 生成/匯出到 csv 檔案。我已經制作了如下所示的保存代碼,但我只想匯出一個可見列。我怎么能那樣做?
Private Sub CmdCSV_Click(sender As Object, e As EventArgs) Handles CmdCSV.Click
Dim sfd As New SaveFileDialog()
sfd.FileName = "export-csv"
sfd.Filter = "CSV File | *.csv"
If sfd.ShowDialog() = DialogResult.OK Then
Using sw As StreamWriter = File.CreateText(sfd.FileName)
Dim dgvColumnNames As List(Of String) = DataGridView1.Columns.Cast(Of DataGridViewColumn).ToList().Select(Function(c) c.Name).ToList()
sw.WriteLine(String.Join(";", dgvColumnNames))
For Each row As DataGridViewRow In DataGridView1.Rows
Dim rowData As New List(Of String)
For Each column As DataGridViewColumn In DataGridView1.Columns
rowData.Add(Convert.ToString(row.Cells(column.Name).Value))
Next
sw.WriteLine(String.Join(";", rowData))
Next
End Using
End If
End Sub
uj5u.com熱心網友回復:
ToList首先,在這里呼叫兩次是沒有意義的:
Dim dgvColumnNames As List(Of String) = DataGridView1.Columns.Cast(Of DataGridViewColumn).ToList().Select(Function(c) c.Name).ToList()
你不需要一個泛型List來做Select,所以放棄第一個ToList:
Dim dgvColumnNames = DataGridView1.Columns.
Cast(Of DataGridViewColumn).
Select(Function(c) c.Name).
ToList()
如果您想過濾該串列以僅包含可見列,這就是您要做的。該Where方法是您過濾的方式:
Dim dgvColumnNames = DataGridView1.Columns.
Cast(Of DataGridViewColumn).
Where(Function(c) c.Visible).
Select(Function(c) c.Name).
ToList()
您還應該替換它:
Dim rowData As New List(Of String)
For Each column As DataGridViewColumn In DataGridView1.Columns
rowData.Add(Convert.ToString(row.Cells(column.Name).Value))
Next
有了這個:
Dim rowData As New List(Of String)
For Each columnName In dgvColumnNames
rowData.Add(Convert.ToString(row.Cells(columnName).Value))
Next
或者,更簡單地說,這個:
Dim rowData = dgvColumnNames.Select(Function(s) row.Cells(columnName).Value.ToString()).ToList()
最后一個ToList也不是必需的,因為String.Join接受IEnumerable(Of String). List除非您確實需要,否則不要花費額外的時間和精力將事物轉換為泛型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495066.html
