Сохранение числового с десятичным числом в текстовый файл из datagridview в vb.net

Это мой код для сохранения значений из представления сетки данных в текстовый файл:

Private Sub TextFileToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TextFileToolStripMenuItem.Click
    Dim filename As String = String.Empty
    Dim sfd1 As New SaveFileDialog()

    sfd1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
    sfd1.FilterIndex = 2
    sfd1.RestoreDirectory = True
    sfd1.Title = "Save Text File"

    If sfd1.ShowDialog() = DialogResult.OK Then
        If sfd1.FileName = String.Empty Then
            MsgBox("Please input filename")
        Else
            filename = sfd1.FileName.ToString
            Saveto_TextFile(dvList, filename)
        End If
    End If
End Sub

Sub Saveto_TextFile(ByVal dvList As DataGridView, ByVal filename As String)
    Dim numCols As Integer = dvList.ColumnCount - 1
    Dim numRows As Integer = dvList.RowCount
    Dim strDestinationFile As String = "" & filename & ".txt"
    Dim tw As TextWriter = New StreamWriter(strDestinationFile)

    For dvRow As Integer = 0 To numRows - 1
        'checking if the checkbox is checked, then write to text file
        If dvList.Rows(dvRow).Cells.Item(0).Value = True Then
            tw.Write("True")
            tw.Write(", ")
        Else
            tw.Write("False")
            tw.Write(", ")
        End If

        'write the remaining rows in the text file
        For dvCol As Integer = 1 To numCols
            tw.Write(dvList.Rows(dvRow).Cells(dvCol).Value)
            If (dvCol <> numCols) Then
                tw.Write(", ")
            End If
        Next
        tw.WriteLine()
    Next
    tw.Close()
End Sub

Этот код отлично работает, но меня беспокоит только то, что я установил для свойства представления сетки данных значение Numeric с двумя десятичными знаками. Когда я сохраняю его в текстовый файл, он удаляет десятичные разряды.

Что я могу сделать, чтобы сохранить десятичные разряды в текстовом файле?


person Matthew    schedule 17.09.2013    source источник
comment
Я не знаю, можем ли мы сказать, что код работает идеально... :) Вы получаете какой-либо вывод в своем текстовом файле?   -  person Tim    schedule 17.09.2013
comment
@Tim: Привет, сэр, да, я получаю вывод из datagridview в txt-файл, но числовые значения в txt-файле не имеют десятичных знаков, но в datagridview есть десятичные значения :)   -  person Matthew    schedule 17.09.2013
comment
@Matthew Как вы форматируете свой DataGridView? Вы сделали это программно или с помощью пользовательского интерфейса?   -  person Alex    schedule 17.09.2013
comment
@Alex: Привет, сэр, я уже знаю свою проблему, просто я сохраняю только числа без десятичных знаков, но если в числах есть десятичные знаки, это работает, извините, это моя вина.   -  person Matthew    schedule 17.09.2013


Ответы (1)


Я изменил ваш метод SaveTo_TextFile. Я добавил два столбца в свой dvList [Столбец1] и [Столбец2]. Мне удалось успешно сохранить десятичное значение, которое я ввел в [Column2].

Я не знаю, как вы отформатировали свой столбец DataGridView, но у меня есть только DataGridViewTextBoxCell без форматирования.

Если бы я использовал форматирование, я бы установил стиль ячейки строки числового столбца следующим образом:

dvList.Columns("Column2").DefaultCellStyle.Format = "N2"

Метод SaveTo_TextFile

Private Sub Saveto_TextFile(ByVal dvList As DataGridView, ByVal filename As String)
    Dim numCols As Integer = dvList.ColumnCount - 1
    Dim numRows As Integer = dvList.RowCount
    Dim strDestinationFile As String = "" & filename & ".txt"
    Dim tw As TextWriter = New StreamWriter(strDestinationFile)

    For dvRow As Integer = 0 To numRows - 1
        'checking if the checkbox is checked, then write to text file
        If dvList.Rows(dvRow).Cells("Column1").Value = True Then
            tw.WriteLine(dvList.Rows(dvRow).Cells("Column2").Value) 'Column2 is the name of the column ... You can also use an index here
        Else
            tw.WriteLine("Not Checked")
        End If

        'write the remaining rows in the text file
        For dvCol As Integer = 1 To numCols
            tw.WriteLine(dvList.Rows(dvRow).Cells(dvCol).Value)
            If (dvCol <> numCols) Then
                tw.WriteLine("???")
            End If
        Next
        tw.WriteLine()
    Next
    tw.Close()
End Sub
person Alex    schedule 17.09.2013