viernes, 10 de abril de 2020

Pasar de DataGridView a Texto plano

En una entrada anterior se explicaba como pasar un JSON almacendao de forma especial en una tabla de una Base de datos a un DatagridView, en esta entrada veremos como generar una cadena de texto con formato JSON a partir de los datos cargados en el DataGridView, para ello basta implementar esta función de Visual Basic.
Se trata de una función recursiva, pues cada padre puede tener múltiples hijos.

Pasar de DataGridView a Texto plano
Más imágenes como esta en tamaño real.



En este caso concreto lee row.Cells(3) con valor a S para escribir, pero no es necesario, de hecho en el ejemplo todos vienen a S. Esto se utiliza por si hay nodos que no queremos mostrar.

 'GENERA UNA CADENA DE TEXTO CON FORMATO JSON A PARTIR DE UNA TABLA DE BBDD
'funcion recursiva que genera un nuevo JSON a partir de los nodos Mandatory leidos en la tabla
    Private Function GeneraNuevoJSON(ByVal output As String, Optional ByVal NodoABuscar As Integer = 0) As String
        Dim NodoPadreABuscar As Integer
        'Genera cadena JSON a partir de los datos del DataGridView
      
        For Each row As DataGridViewRow In grdDatosJSON.Rows
            'Solo los tiene en cuenta si son manadatory
            If row.Cells(3).Value = "S" Then
                'no comienza hasta que encuentra nodo raiz
                If row.Cells(0).Value = row.Cells(2).Value And NodoABuscar = 0 Then
                    If output <> "" Then
                        If output.Substring(output.Length - 1, 1) <> "," Then
                            output = output & ":{"
                        End If
                    End If
                    NodoPadreABuscar = row.Cells(0).Value  'mi nodo
                    output = output & JsonConvert.SerializeObject(row.Cells(1).Value)
                    GeneraNuevoJSON(output, NodoPadreABuscar)
                    'Normalmente por aquí no pasará casi nunca pero tiene que estar por si un nodo raíz no tuviera hijos
                    If antiguooutput.Substring(antiguooutput.Length - 1, 1) <> "," Then
                        output = antiguooutput & ":" & Chr(34) & Chr(34) & "}"
                    Else
                        antiguooutput = antiguooutput.TrimEnd(",") 'elimina la última coma
                        output = antiguooutput & "},"  'si escribe esto debe eliminar la última coma    
                    End If
                Else
                    If NodoABuscar = row.Cells(2).Value Then
                        If NodoABuscar <> row.Cells(0).Value Then 'si el nodo padre soy yo mismo, no hago nada
                            'si hay comilla al final, no pone :{
                            If output.Substring(output.Length - 1, 1) <> "," Then
                                output = output & ":{"
                            End If
                            NodoPadreABuscar = row.Cells(0).Value  'mi nodo
                            output = output & JsonConvert.SerializeObject(row.Cells(1).Value)
                            GeneraNuevoJSON(output, NodoPadreABuscar)
                          
                            If antiguooutput.Substring(antiguooutput.Length - 1, 1) <> "," Then
                                output = antiguooutput & ":" & Chr(39) & row.Cells(7).Value & Chr(39) & ","
                            Else
                                antiguooutput = antiguooutput.TrimEnd(",") 'elimina la última coma
                                output = antiguooutput & "},"  'si escribe esto debe eliminar la última coma
                            End If
                        End If
                    End If
                End If
            End If
        Next
        antiguooutput = output
        GeneraNuevoJSON = output
    End Function

El resultado final de esta función es una variable output que contiene una cadena de texto con formato JSON.

La función se llamará por ejemplo al pulsar un botón de un formulario que dé la orden de generar el JSON a partir de los datos que hay en el DataGridView.

Private Sub BtnNuevoJSON_Click(sender As Object, e As EventArgs) Handles BtnNuevoJSON.Click
      
        Dim output As String = ""
      
        output = GeneraNuevoJSON(output)
        output = output.TrimEnd(",")  'elimina ultima coma si viene
        output = "{" & output & "}"
        MuestraJSON(output)
        BtnDescargarJSON.Enabled = True

End Sub

La función MuestraJSON mostrará el JSON generado en un control TreeView, eso lo veremos en la próxima entrada. Mostrar en un TreeView un JSON 

No hay comentarios:

Publicar un comentario