Запазване на числови с десетични в txt файл от 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 с 2 знака след десетичната запетая. Когато го записвам в текстовия файл, той премахва десетичните знаци.

Какво мога да направя, за да запазя десетичните знаци в текстовия файл?


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 [Column1] и [Column2]. Успях успешно да запазя десетичната стойност, която въведох в [Колона2].

Не знам как сте форматирали вашата колона 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