Imports System.IO
Public Class FormPressureVesselsTables
    Dim Table As New DataTable
    Dim NombreArchivoDuracion As String = "ArchivoDeLasDuraciones.TXT"
    Dim HayModificacion As Boolean = False
    Private Sub btncerrarform_Click(sender As Object, e As EventArgs) Handles btncerrarform.Click
        Me.Visible = False
        ' ******************** Este Form es cerrado cuando esta es cerrado  (cf. FormPressureVessels_FormClosing)
    End Sub
    Private Sub FormPressureVesselsTables_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Table.Columns.Add("MATERIAL", Type.GetType("System.String"))
        'Table.Columns.Add("DIAMETRO", Type.GetType("System.String"))
        'Table.Columns.Add("ESPESOR", Type.GetType("System.String"))
        'Table.Columns.Add("DURACIÓN", Type.GetType("System.String"))

        DarDuracionDG.Columns.Add("MATERIAL", "MATERIAL")
        DarDuracionDG.Columns.Add("DIAMETRO", "DIAMETRO")
        DarDuracionDG.Columns.Add("ESPESOR", "ESPESOR")
        DarDuracionDG.Columns.Add("DURACIÓN", "DURACIÓN")

        ' DarDuracionDG.DataSource = Table

        For C As Integer = 0 To DarDuracionDG.Columns.Count - 1
            DarDuracionDG.Columns(C).HeaderCell.Style.Font = New Font("Microsoft Sans Serif", 10, FontStyle.Bold)
            DarDuracionDG.Columns(C).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
            DarDuracionDG.Columns(C).ReadOnly = True
        Next C

        DarDuracionDG.Columns("DURACIÓN").ReadOnly = False
        DarDuracionDG.AllowUserToAddRows = False

        LlenarDGV()

        'Table.Rows.Add("Acero al carbón", "20-25", "3/16", "1")
        'Table.Rows.Add("Acero al carbón", "26-30", "3/16", "1")
        'Table.Rows.Add("Acero al carbón", "31-35", "3/16", "2")
        'Table.Rows.Add("Acero al carbón", "36-40", "3/16", "2")


    End Sub

    Private Sub LlenarDGV()
        Dim SeparadorSplit As Char() = {"~"}  ' Este caracter (ASCII 126) nunca es utilazado solo en una frase, en nungun languaje
        Dim ResultadoSplit() As String   ' Este es un tabla de String
        Dim I As Integer = 0
        Dim Linea As String

        If File.Exists(NombreArchivoDuracion) Then
            Dim ArchivoParaLeer As New StreamReader(NombreArchivoDuracion, System.Text.Encoding.Default)

            Try
                DarDuracionDG.Rows.Clear()
            Catch
            End Try

            Do Until ArchivoParaLeer.Peek = -1
                Linea = ArchivoParaLeer.ReadLine()
                If Linea.Length > 1 AndAlso Linea.Substring(0, 2) = "ES" Then   ' ES para la version españole, todas otras lineas son evidado
                    ResultadoSplit = Linea.Split(SeparadorSplit)
                    DarDuracionDG.Rows.Add(ResultadoSplit(1), ResultadoSplit(2), ResultadoSplit(3), ResultadoSplit(4))
                End If
            Loop
            ArchivoParaLeer.Close()
            ArchivoParaLeer.Dispose()
        End If
    End Sub

    Private Sub DuplicarArchivoAntesModificaciones()
        FileCopy(NombreArchivoDuracion, "BackUp" & NombreArchivoDuracion)
    End Sub

    Private Sub RegistrarLasModificaciones()

        Dim ArchivoParaEscribir As New StreamWriter(NombreArchivoDuracion, False, System.Text.Encoding.Default)

        ' Leer y copiar los comentarios del inicio del archivo  (Puedes escribir cualquier si comenza por #)
        Dim ArchivoParaLeer As New StreamReader("BackUp" & NombreArchivoDuracion, System.Text.Encoding.Default)
        Dim Linea As String
        Do Until ArchivoParaLeer.Peek = -1
            Linea = ArchivoParaLeer.ReadLine()
            If Linea.Substring(0, 1) = "#" Then
                ArchivoParaEscribir.WriteLine(Linea)
            Else
                Exit Do
            End If
        Loop
        ArchivoParaLeer.Close()
        ArchivoParaLeer.Dispose()
        For R As Integer = 0 To DarDuracionDG.Rows.Count - 1
            Linea = "ES" & "~" &
                    DarDuracionDG.Item("MATERIAL", R).Value & "~" &
                    DarDuracionDG.Item("DIAMETRO", R).Value & "~" &
                    DarDuracionDG.Item("ESPESOR", R).Value & "~" &
                    DarDuracionDG.Item("DURACIÓN", R).Value
            ArchivoParaEscribir.WriteLine(Linea)
        Next
        ArchivoParaEscribir.Close()
        ArchivoParaEscribir.Dispose()
    End Sub

    Private Sub BRegistrar_Click(sender As Object, e As EventArgs) Handles BRegistrar.Click
        If HayModificacion Then
            If MessageBox.Show("¿Registrar modificacion(es) y recagar la tabla ?", "Confirmacion", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                HayModificacion = False
                DuplicarArchivoAntesModificaciones()  ' Solamente la ultima version cargada
                RegistrarLasModificaciones()
                LlenarDGV()   ' Re llenar el DGV
            End If
        End If

    End Sub

    Private Sub DarDuracionDG_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DarDuracionDG.CellValueChanged
        If DarDuracionDG.Columns(e.ColumnIndex).Name = "DURACIÓN" Then
            HayModificacion = True
        End If
    End Sub

End Class