Shaheer Rizwan Ответов: 1

Обновление и сохранение datagridview в CSV после загрузки.


Мне удалось закодировать свой DataGridView для загрузки CSV-файла. Теперь я хочу, чтобы это было так, когда новые записи добавляются и обновляются, чтобы CSV обновлялся при нажатии кнопки.

Обновление: приведенный ниже код работает с точки зрения сохранения вновь введенных данных. Однако, когда я загружаю файл в dataGridView, он дублирует данные, которые уже были в нем, и поэтому путает их.

Как я могу улучшить приведенный ниже код, чтобы он перезаписывал CSV-файл?

Что я уже пробовал:

Private Sub btnSaveGeneralDGV_Click(sender As Object, e As EventArgs) Handles btnSaveGeneralDGV.Click
        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

        For Each R As DataGridViewRow In dataGVGeneral.Rows
            For Each C As DataGridViewCell In R.Cells
                If Not C.Value Is Nothing Then
                    StrExport &= """" & C.Value.ToString & ""","
                Else
                    StrExport &= """" & "" & ""","
                End If
            Next
            StrExport = StrExport.Substring(0, StrExport.Length - 1)
            StrExport &= Environment.NewLine
        Next

        Dim tw As System.IO.TextWriter = New System.IO.StreamWriter("E:\SAT\Work.io\Work.io\bin\Debug\ListofTasks.csv", True)
        tw.Write(StrExport)
        tw.Close()

1 Ответов

Рейтинг:
0

Garth J Lancaster

Не знаю в чем твоя проблема

1) добавьте новую кнопку для "сохранения обновлений"
2) Добавьте обработчик событий для нажатия кнопки из (1)
3) Откройте файл для вывода - я предлагаю вам написать временный файл, например E:\SAT\Work.io\Work.io\bin\Debug\ListofTasks.csv.ПТМ"внутри блока использования
4) цикл для каждой строки dataGVGeneral
5) объедините столбцы строки с помощью join &',', чтобы получить CSV-файл
6) Запишите строку в файл
7) (вне цикла using & loop) архивируйте исходный файл и переименуйте обновленный файл без '.tmp' в конце

Вы можете изменить 7, чтобы объединить файлы или такие, которые вам нужны

Чистки рядов я думаю, что можно сделать лучше с помощью объекта DataTable и csvhelper библиотека например CsvHelper[^]

[Edit 2] это может быть полезно, если вы идете по маршруту datatable Запись DataTable в CSV - файл[^]


Shaheer Rizwan

Есть ли способ очистить CSV-файл и переписать его содержимое на основе DataGridView?

Могу ли я использовать что-то подобное, а затем просто добавить четкую строку CSV?

Private Sub btnExportData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportData.Click
Dim StrExport As String = ""
For Each C As DataGridViewColumn In DataGridView1.Columns
StrExport &= """" & C.HeaderText & ""","
Next
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine

For Each R As DataGridViewRow In DataGridView1.Rows
For Each C As DataGridViewCell In R.Cells
If Not C.Value Is Nothing Then
StrExport &= """" & C.Value.ToString & ""","
Else
StrExport &= """" & "" & ""","
End If
Next
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine
Next

Dim tw As IO.TextWriter = New IO.StreamWriter("C:\Test1.CSV")
tw.Write(StrExport)
tw.Close()
End Sub <code>

Garth J Lancaster

конечно, вы можете перезаписать файл - например, глядя на свой код

Dim tw As IO.TextWriter = New IO.StreamWriter("C:\Test1.CSV")
если бы ты это сделал
Dim tw As IO.TextWriter = New IO.StreamWriter("C:\Test1.CSV", True )
это перезапишет файл .. в моем сознании речь идет о "безопасности"..

Shaheer Rizwan

Эй, приятель, я только что попробовал это снова, и он не перезаписывает весь файл и дублирует записи, уже присутствующие после его загрузки. Есть ли другой способ? Извините что беспокою вас я просто немного застрял

Shaheer Rizwan

Проверьте выше точный код

Garth J Lancaster

к сожалению, снять , Истинный или измените его на , Ложный - Я неправильно прочитал документацию Microsoft - https://docs.microsoft.com/en-us/dotnet/api/system.io.streamwriter.-ctor?view=netcore-3.1#System_IO_StreamWriter__ctor_System_String_System_Boolean_

Shaheer Rizwan

Хорошо я попробую это сделать спасибо