none
Error La columna 'CedulaJuridica' no pertenece a la tabla DataTableClientes RRS feed

  • Pregunta

  • Buenas tardes, tengo error que dice que la columna no pertenece a la tabla. No se realmente donde esta mal. 

    Mi variable DataTable: 

    Dim dtClientes As DataTable = New DataTable("DataTableClientes")

    Mis columnas:

            Dim columna As New DataColumn
    
    
    
            With columna
                'Cedula Juridica
                .DataType = System.Type.GetType("System.String")
                .AllowDBNull = False
                .Caption = "Cédula jurídica"
                .ColumnName = "CedulaJuridica"
                .ReadOnly = True
                dtClientes.Columns.Add(columna)
    
                'Razon Social
                columna = New DataColumn
                .DataType = System.Type.GetType("System.Int32")
                .AllowDBNull = False
                .Caption = "Razón social"
                .ColumnName = "RazonSocial"
                .ReadOnly = True
                dtClientes.Columns.Add(columna)
    
    
    End With

    Aqui estoy recorriendo mi archivoXML

        Private Sub llenarCliente()
            Dim Xml As XmlDocument
            Dim NodeList As XmlNodeList
            Dim Node As XmlNode
    
    
            llenarDataTable()
            Try
                Xml = New XmlDocument()
                Xml.Load(Application.StartupPath & "\Empresas.xml")
                NodeList = Xml.SelectNodes("/Empresas/Empresa")
                For Each Node In NodeList
    
                    Dim rw As DataRow = dtClientes.NewRow
                    rw("CedulaJuridica") = Node.SelectSingleNode("CedulaJuridica").InnerText
    
                    rw("RazonSocial") = Node.SelectSingleNode("RazonSocial").InnerText
    
    
    
                    dtClientes.Rows.Add(rw)
    
                Next
    
                Me.dgvClientesFactura.DataSource = dtClientes
            Catch ex As Exception
                MsgBox(ex.GetType.ToString & vbNewLine & ex.Message.ToString)
            Finally
                Console.Read()
            End Try
        End Sub

    miércoles, 22 de julio de 2020 19:25

Respuestas

  • Hola, el problema es que estás usando el mismo objeto DataColumn llamado columna dos veces , si bien es cierto lo agregas al datatable , pero luego lo vuelves a instanciar inmediatamente después 

     dtClientes.Columns.Add(columna)
     'Razon Social
     columna = New DataColumn
     

    debes crear los objetos de columna individualmente e ir agregando al datatable

            Dim dtClientes As DataTable = New DataTable("DataTableClientes")
            Dim columna As New DataColumn
            With columna
                'Cedula Juridica
                .DataType = System.Type.GetType("System.String")
                .AllowDBNull = False
                .Caption = "Cédula jurídica"
                .ColumnName = "CedulaJuridica"
                .ReadOnly = True
                dtClientes.Columns.Add(columna)
            End With
    
            Dim columna1 As New DataColumn
            With columna1
                .DataType = System.Type.GetType("System.Int32")
                .AllowDBNull = False
                .Caption = "Razón social"
                .ColumnName = "RazonSocial"
                .ReadOnly = True
                dtClientes.Columns.Add(columna1)
            End With

    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta dianas28 miércoles, 22 de julio de 2020 21:39
    miércoles, 22 de julio de 2020 20:05

Todas las respuestas

  • Hola, el problema es que estás usando el mismo objeto DataColumn llamado columna dos veces , si bien es cierto lo agregas al datatable , pero luego lo vuelves a instanciar inmediatamente después 

     dtClientes.Columns.Add(columna)
     'Razon Social
     columna = New DataColumn
     

    debes crear los objetos de columna individualmente e ir agregando al datatable

            Dim dtClientes As DataTable = New DataTable("DataTableClientes")
            Dim columna As New DataColumn
            With columna
                'Cedula Juridica
                .DataType = System.Type.GetType("System.String")
                .AllowDBNull = False
                .Caption = "Cédula jurídica"
                .ColumnName = "CedulaJuridica"
                .ReadOnly = True
                dtClientes.Columns.Add(columna)
            End With
    
            Dim columna1 As New DataColumn
            With columna1
                .DataType = System.Type.GetType("System.Int32")
                .AllowDBNull = False
                .Caption = "Razón social"
                .ColumnName = "RazonSocial"
                .ReadOnly = True
                dtClientes.Columns.Add(columna1)
            End With

    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta dianas28 miércoles, 22 de julio de 2020 21:39
    miércoles, 22 de julio de 2020 20:05
  • No se ve nada claro el problema en los fragmentos de código mostrados. Es el momento de usar el debugger.

    Pon un punto de ruptura al final del fragmento donde defines las columnas, e inicia la depuración. Cuando el debugger se pare ahí, examina el contenido del DataTable para ver si contiene las columnas correctamente definidas (puedes usar la ventana de variable locales, o también el visor de datatables que tiene incorporado Visual Studio cuando pasas el ratón sobre la variable).

    Si en ese punto tiene las columnas correctamente definidas, entonces pon otro punto de ruptura al principio del sitio donde lees el XML, y continúa la ejecución. Cuando se pare en este segundo punto, vuelve a examinar el DataTable y comprueba si todavía están definidas las columnas. Si no lo están, es un problema de flujo de ejecución o de instanciación de variables. Pero no adelantemos acontecimientos, primero haz los experimentos con el debugger, y cuando sepamos en qué punto "se pierden" las columnas entonces seguimos afinando para ver cómo se llegó a esa situación.

    miércoles, 22 de julio de 2020 20:11
  • Hola dianas28

    ¿Podrías por favor revisar lo que Augusto y Alberto te sugieren y avisarnos cómo te fue?

    Saludos cordiales

    Gabriel Castro

    miércoles, 22 de julio de 2020 21:03
    Moderador
  • Me sirvio colocar cada columna con diferente nombre, ya me lo reconoce, muchas gracias.
    miércoles, 22 de julio de 2020 21:40
  • Lo pondré en practica, gracias.
    miércoles, 22 de julio de 2020 21:40