[英]Writing multiple selected DataGridView rows to CSV
下面的代碼成功地允許我將選定的行寫入 a.csv 文件。
我遇到問題,當我 select 多行並嘗試將其寫入文件時,它會將所有行放在 .csv 文件的同一行上。
我如何修改下面的代碼,以便它允許選擇多行,並將每一行寫入 .csv 文件的新行?
Dim StrExport As String = ""
For Each C As DataGridViewColumn In dataGVGeneral.Columns
StrExport &= "" & C.HeaderText & ","
Next
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine
'Only the row which is selected will be written
For Each R As DataGridViewRow In dataGVGeneral.Rows
If R.Selected = True Then
For Each C As DataGridViewCell In R.Cells
If Not C.Value Is Nothing Then
StrExport &= "" & C.Value.ToString & ","
Else
StrExport &= "" & "" & ","
End If
Next
Else
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine
End If
Next
Dim tw As System.IO.TextWriter = New System.IO.StreamWriter("E:\SAT\Work.io\Work.io\bin\Debug\Session.csv", False)
tw.Write(StrExport)
tw.Close()
在StrExport = StrExport.Substring(0, StrExport.Length - 1)
,我認為您打算使用&=
而不是=
。
但是,您應該使用StringBuilder來創建字符串,因為將大約十個以上的字符串連接在一起時效率更高。
要將字符串與逗號/任何其他內容連接在一起,String.Join很有用,因為您不必擔心最后的逗號。
最后,使用一點點 LINQ 可以使代碼更短但仍然相當容易理解:
Private Sub bnSaveSelected_Click(sender As Object, e As EventArgs) Handles bnSaveSelected.Click
Dim sb As New Text.StringBuilder()
sb.AppendLine(String.Join(",", dataGVGeneral.Columns.Cast(Of DataGridViewColumn).Select(Function(c) c.HeaderText)))
For Each dr As DataGridViewRow In dataGVGeneral.Rows
If dr.Selected Then
sb.AppendLine(String.Join(",", dr.Cells.Cast(Of DataGridViewCell).Select(Function(c) c.Value.ToString())))
End If
Next
IO.File.WriteAllText("C:\temp\SampleCsv.csv", sb.ToString())
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.