Principales respuestas
Problema en datagridview al cargar

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
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
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 -
-
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 -
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
-
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 -
-
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 -
-
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
-
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