none
Problema en datagridview al cargar RRS feed

  • Pregunta

  • Buenas tengo este problema al cargar un datagridview

    se donde esta el problema pero no se solucionarlo 

    Gracias

    el problema me lo da en esta parte del codigo, creo

     For Each node2 In nodelist
                        Col.HeaderText = node2.ChildNodes(Con_x).Name
                    Next

    Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim node2 As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Dgv_Estilos.xml")
                nodelist = Documentoxml.SelectNodes("/STYLES/STYLE")
    
                For Con_x = 0 To nodelist.Count - 1
                    Dim Col As New DataGridViewTextBoxColumn
                    Col.DataPropertyName = "PropertyName"
                    For Each node2 In nodelist
                        Col.HeaderText = node2.ChildNodes(Con_x).Name
                    Next
                    Col.Name = CStr(Dgv_Estilos.Columns.Count - 1)
                    Dgv_Estilos.Columns.Add(Col)
                    Dim colum_com As Integer = Dgv_Estilos.Columns.Count - 1
                    Dim x As Integer = 0
    
                    For Each node In nodelist
    
                        If Dgv_Estilos.Rows.Count = nodelist.Count Then
    
                        Else
                            Dgv_Estilos.Rows.Add()
                        End If
    
    
                        Dim nombre_nodo = node.ChildNodes(Con_x).InnerText
                        'Label3.Text = node.ChildNodes.Item(Con_x).Name
                        If (IsNumeric(nombre_nodo)) = True And node.ChildNodes.Item(Con_x).Name = "salvi" Then
                            Dim Nombre_nodo_Numerico As Decimal = Decimal.Parse(nombre_nodo, New System.Globalization.NumberFormatInfo With {.NumberDecimalSeparator = "."})
                            '' ''Nombre_nodo_Numerico = Nombre_nodo_Numerico.ToString(0.0)
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = Nombre_nodo_Numerico
                        ElseIf (IsNumeric(nombre_nodo)) = True Then
                            Dim Nombre_nodo_Numerico As Decimal = Decimal.Parse(nombre_nodo, New System.Globalization.NumberFormatInfo With {.NumberDecimalSeparator = "."})
                            '' ''Nombre_nodo_Numerico = Nombre_nodo_Numerico.ToString(0.0)
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = Nombre_nodo_Numerico
                        Else
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = nombre_nodo
                        End If
                        ''Me.Dgv_Herramientas.Rows(x).Cells(colum_com).Value = nombre_nodo
                        x += 1
                    Next
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try


    • Editado JETET lunes, 16 de mayo de 2016 7:27
    lunes, 16 de mayo de 2016 7:26

Respuestas

  • He mejorado pero el problema que tengo ahora es que todos los datos de una cerveza me los escribe en la misma columna

     Sub Carga_Dgv_Tabla_Estilos()
    
            Try
                Dim nodelist As XmlNodeList
                Dim doc2 As New XmlDocument()
                Dim node As XmlNode
                nodelist = doc2.SelectNodes("/STYLES/STYLE")
                doc2.Load("Datos/Dgv_Estilos.xml")
    
    
                Dim xn As XmlNode = doc2.SelectSingleNode("/STYLES")
    
    
                Dim primerHijo As XmlNode = xn.FirstChild
                If primerHijo.HasChildNodes Then
                    Dim i As Integer
    
                    For i = 0 To primerHijo.ChildNodes.Count - 1
    
                        Dgv_Tabla_Estilos.Columns.Add(i, primerHijo.ChildNodes(i).Name)
                        
    
    
                    Next i
                End If
                For Each node In nodelist
                    Dgv_Tabla_Estilos.Rows.Add(node.InnerText)
                Next
            Catch ex As Exception
    
                'Error trapping
    
                MsgBox(ex.ToString())
    
            End Try
           
    
        End Sub

    • Marcado como respuesta JETET miércoles, 18 de mayo de 2016 7:42
    martes, 17 de mayo de 2016 19:45

Todas las respuestas

  • Hola,

    Quita el Try - Catch y muestra la lína exacta en donde ocurre el error.

    El NullReferenceException indica que está llegando nulo en alguna parte de tu código.

    Además, si lees el xml deberías llenarlo en un DataTable y no directamente al DataGridView.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 16 de mayo de 2016 7:42
  • Joel gracias por responde, lo de datatable nunca lo he hecho y si quito try me marca este error no se va a ninguna linea


    • Editado JETET lunes, 16 de mayo de 2016 8:01
    lunes, 16 de mayo de 2016 8:01
  • Según leo en la primera imagen, la línea donde salta el problema es la línea 155 del archivo Receta_Nueva.vb.  Ponga el código que pertenece a la función o método que contiene esta línea, y luego identifique la línea 155 para nosotros.

    Jose R. MCP
    Code Samples

    lunes, 16 de mayo de 2016 14:07
    Moderador
  • For Each node2 In nodelist Col.HeaderText = node2.ChildNodes(Con_x).Name --->Esta es la linea 155 Next

    Aqui abajo codigo completo

    Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim node2 As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Dgv_Estilos.xml")
                nodelist = Documentoxml.SelectNodes("/STYLES/STYLE")
    
                For Con_x = 0 To nodelist.Count - 1
                    Dim Col As New DataGridViewTextBoxColumn
                    Col.DataPropertyName = "PropertyName"
                    For Each node2 In nodelist
                        Col.HeaderText = node2.ChildNodes(Con_x).Name
                    Next
                    Col.Name = CStr(Dgv_Estilos.Columns.Count - 1)
                    Dgv_Estilos.Columns.Add(Col)
                    Dim colum_com As Integer = Dgv_Estilos.Columns.Count - 1
                    Dim x As Integer = 0
    
                    For Each node In nodelist
    
                        If Dgv_Estilos.Rows.Count = nodelist.Count Then
    
                        Else
                            Dgv_Estilos.Rows.Add()
                        End If
    
    
                        Dim nombre_nodo = node.ChildNodes(Con_x).InnerText
                        'Label3.Text = node.ChildNodes.Item(Con_x).Name
                        If (IsNumeric(nombre_nodo)) = True And node.ChildNodes.Item(Con_x).Name = "salvi" Then
                            Dim Nombre_nodo_Numerico As Decimal = Decimal.Parse(nombre_nodo, New System.Globalization.NumberFormatInfo With {.NumberDecimalSeparator = "."})
                            '' ''Nombre_nodo_Numerico = Nombre_nodo_Numerico.ToString(0.0)
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = Nombre_nodo_Numerico
                        ElseIf (IsNumeric(nombre_nodo)) = True Then
                            Dim Nombre_nodo_Numerico As Decimal = Decimal.Parse(nombre_nodo, New System.Globalization.NumberFormatInfo With {.NumberDecimalSeparator = "."})
                            '' ''Nombre_nodo_Numerico = Nombre_nodo_Numerico.ToString(0.0)
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = Nombre_nodo_Numerico
                        Else
                            Me.Dgv_Estilos.Rows(x).Cells(colum_com).Value = nombre_nodo
                        End If
                        ''Me.Dgv_Herramientas.Rows(x).Cells(colum_com).Value = nombre_nodo
                        x += 1
                    Next
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try

    lunes, 16 de mayo de 2016 14:31
  • Pues creo que debe validar el resultado devuelto por la llamada a ChildNodes() en esa línea.  ¿Por qué?  Porque si esa función devuelve nulo (Nothing en VB), entonces acceder a la propiedad Name no es posible.

    Jose R. MCP
    Code Samples

    lunes, 16 de mayo de 2016 14:42
    Moderador
  • Lo e intentado asi y nada el mismo error

     For Each node2 In nodelist
                        If node2.ChildNodes(Con_x).Name Is Nothing Then
                        Else
                            Col.HeaderText = node2.ChildNodes(Con_x).Name
                        End If
    
                    Next

    lunes, 16 de mayo de 2016 15:41
  • Está mal hecha la prueba en el IF.  Debe ser If node2.ChildNodes(Con_x) Is Not Nothing Then. Ah, y elimina el ELSE.  ¿Ve la diferencia)  No hay tal cosa como Name en la prueba.  La idea esNO acceder a Name si ChildNodes() devuelve nulo.

    Jose R. MCP
    Code Samples

    lunes, 16 de mayo de 2016 15:49
    Moderador
  • me devuelve esto

    si te es mas facil lo que quiero es que las columnas que se agregan al datagridview tenga el nombre de los nodos en la cabecera de las columnas

    es lo que estoy intentando

     gracias por todo

    lunes, 16 de mayo de 2016 18:53
  • De esta manera me mete las columnas bien pero todos los datos los meten en la primera columna y me da el siguiente error

    Sub Carga_Dgv_Tabla_Estilos()
            'SACA LA COLECCION DE NODOS DEL NODO HIJO DEL XML
            Try
    
                Dim doc2 As New XmlDocument()
                doc2.Load("Datos/Dgv_Estilos.xml")
    
    
                Dim xn As XmlNode = doc2.SelectSingleNode("/STYLES")
    
    
                Dim primerHijo As XmlNode = xn.FirstChild
                If primerHijo.HasChildNodes Then
                    Dim i As Integer
    
                    For i = 0 To primerHijo.ChildNodes.Count - 1
                        'MsgBox(primerHijo.ChildNodes(i).Name)
                        Dgv_Tabla_Estilos.Columns.Add(i, primerHijo.ChildNodes(i).Name)
                        
    
                    Next i
                End If
    
            Catch ex As Exception
    
                'Error trapping
    
                MsgBox(ex.ToString())
    
            End Try
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Dgv_Estilos.xml")
                nodelist = Documentoxml.SelectNodes("/STYLES/STYLE")
    
                For Con_x = 0 To nodelist.Count - 1
                    Dim colum_com As Integer = Dgv_Tabla_Estilos.Columns.Count - 1
                    Dim x As Integer = 0
    
                    For Each node In nodelist
    
                        Dim nombre_nodo = node.ChildNodes(Con_x).InnerText
                        Dgv_Tabla_Estilos.Rows.Add(nombre_nodo)
                        x += 1
                    Next
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try
    
        End Sub

    El error me lo da en esta linea 

    Dim nombre_nodo = node.ChildNodes(Con_x).InnerText


    • Editado JETET martes, 17 de mayo de 2016 7:47
    martes, 17 de mayo de 2016 7:45
  • He mejorado pero el problema que tengo ahora es que todos los datos de una cerveza me los escribe en la misma columna

     Sub Carga_Dgv_Tabla_Estilos()
    
            Try
                Dim nodelist As XmlNodeList
                Dim doc2 As New XmlDocument()
                Dim node As XmlNode
                nodelist = doc2.SelectNodes("/STYLES/STYLE")
                doc2.Load("Datos/Dgv_Estilos.xml")
    
    
                Dim xn As XmlNode = doc2.SelectSingleNode("/STYLES")
    
    
                Dim primerHijo As XmlNode = xn.FirstChild
                If primerHijo.HasChildNodes Then
                    Dim i As Integer
    
                    For i = 0 To primerHijo.ChildNodes.Count - 1
    
                        Dgv_Tabla_Estilos.Columns.Add(i, primerHijo.ChildNodes(i).Name)
                        
    
    
                    Next i
                End If
                For Each node In nodelist
                    Dgv_Tabla_Estilos.Rows.Add(node.InnerText)
                Next
            Catch ex As Exception
    
                'Error trapping
    
                MsgBox(ex.ToString())
    
            End Try
           
    
        End Sub

    • Marcado como respuesta JETET miércoles, 18 de mayo de 2016 7:42
    martes, 17 de mayo de 2016 19:45