none
Datatable.select Columna no encontrada RRS feed

  • Pregunta

  • Buen día 

    Me podrían ayudar por favor, necesito filtrar un DataTable que contiene datos de una consulta realizada previamente, solo que esta consulta contiene muchos registros, necesito solo los regitros que coincidan con un string donde guardo información ej.(esto es ejemplo son muchos datos mas)

    datatable d3

    datatable e4

    en d3 tengo ORDEN, NOMBRE, TELEFONO EMAIL

    en e4 tengo ORDEN, AUTO, COLOR, PLACAS

    Entonces mi código es el siguiente 

    Try
        Escribirb1(strStreamWriter, b1)
         Dim dr As DataRow
           For Each dr In d3.Rows
             For j As Integer = 0 To d3.Columns.Count - 2
               Dim orden As String = dr.Item(0).ToString
                If j = d3.Columns.Count - 2 Then
                            strStreamWriter.WriteLine(dr.Item(j).ToString)
           Dim rows() As DataRow = e4.Select("Orden = " + orden) 'AQUI TENGO EL ERROR
              If rows.Length <> 0 Then
                For Each row As DataRow In rows
    
                Next
              End If
             Else                       strStreamWriter.Write(dr.Item(j).ToString)
                            strStreamWriter.Write("|")
                        End If
                    Next
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
                strStreamWriter.Close()

    Me dice que no encuentra la columna que tiene "orden"

    lo que requiero es que cuando termine de escribir lo que tiene en D3, siga con E4 un renglon abajo pero solo con la información que es igual a la orden en D3, por eso quiero filtrar la informacion de E4 para solo recorrer lo que coincida con la orden y poderlo vaciar en un txt


    No se si me explique bien, espero me puedan ayudar.

    Gracias



    Chinoafro

    martes, 22 de octubre de 2019 16:44

Todas las respuestas

  • Hola chinoafro

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te comparto a continuación el siguiente enlace

     

     https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataset-datatable-dataview/viewing-data-in-a-datatable

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     


    • Editado Pablo Rubio martes, 22 de octubre de 2019 21:06
    martes, 22 de octubre de 2019 21:06
  • Hola, no se sientiendo bien tu requerimiento pero te muestro un ejemplo y me dices si es esto lo que buscas ej:

     Private Sub Button26_Click(sender As Object, e As EventArgs) Handles Button26.Click
            Dim D3 As New DataTable()
            Dim E4 As New DataTable()
    
            E4.Columns.Add("ORDEN", Type.GetType("System.String"))
            E4.Columns.Add("AUTO", Type.GetType("System.String"))
            E4.Columns.Add("COLOR", Type.GetType("System.String"))
            E4.Columns.Add("PLACAS", Type.GetType("System.String"))
    
            D3.Columns.Add("ORDEN", Type.GetType("System.String"))
            D3.Columns.Add("NOMBRE", Type.GetType("System.String"))
            D3.Columns.Add("TELEFONO", Type.GetType("System.String"))
            Dim a As Integer = 0
    
            For i As Integer = 0 To 100
                Dim row As DataRow = E4.NewRow
                row.ItemArray = ({"uno" & a, "dos", "tres", "Cuatro"})
                E4.Rows.Add(row)
                a += 1
            Next
    
            a = 0
    
            For i As Integer = 0 To 100
                If a = 5 Then a = 0
                Dim row As DataRow = D3.NewRow
                row.ItemArray = ({"uno" & a, "Cinco", "Seis"})
                D3.Rows.Add(row)
                a += 1
    
            Next
    
            Dim Buscar As String = TextBox1.Text
            Dim Resultado As String = ""
            For Each row As DataRow In E4.Rows
                If Buscar = row(0) Then
                    Resultado += "ORDEN DE E4:    " & row(0) & Environment.NewLine
                    For Each row2 As DataRow In D3.Rows
                        If row2(0) = row(0) Then
                            Resultado += "Dato D3: ORDEN " & row2(0) & " NOMBRE: " & row2(1) & " TELÉFONO: " & row2(2) & Environment.NewLine
                        End If
                    Next
                End If
    
            Next
    
    
            MsgBox(Resultado)
    
        End Sub

    En el ejemplo busca en el TextBox "uno3" y recorre la segunda DataTable

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF miércoles, 23 de octubre de 2019 5:59
    miércoles, 23 de octubre de 2019 5:57
  • Hola:
    ¿ Puedes poner la(s) consulta(s) que haces para cargar los 2 datatables ?
    ¿ Puedes poner la(s) estructura(s) de las tabla(s) implicadas en la(s) consulta(s) ?
    Te pido esto porque tiene mucha "pinta" que son tablas relacionadas, si esto es cierto, visualizar los registros de la segunda tabla cada vez que te mueves por los registros de la primera tabla es bastante sencillo

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Pablo Rubio miércoles, 23 de octubre de 2019 21:45
    miércoles, 23 de octubre de 2019 10:30
  • Muchas gracias por tu respuesta

    les comento que ya lo solucione, solo me faltaba agregar los caracteres ( ' ) osea: ("Orden = '" & orden & "'") y listo muchas gracias

    ry
        Escribirb1(strStreamWriter, b1)
         Dim dr As DataRow
           For Each dr In d3.Rows
             For j As Integer = 0 To d3.Columns.Count - 2
               Dim orden As String = dr.Item(0).ToString
                If j = d3.Columns.Count - 2 Then
                            strStreamWriter.WriteLine(dr.Item(j).ToString)
           Dim rows() As DataRow = e4.Select(""Orden = '" & orden & "'") -- aqui agregue los ' '
              If rows.Length <> 0 Then
                For Each row As DataRow In rows
    
                Next
              End If
             Else                       strStreamWriter.Write(dr.Item(j).ToString)
                            strStreamWriter.Write("|")
                        End If
                    Next
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
                strStreamWriter.Close()


    Chinoafro

    • Propuesto como respuesta Pablo Rubio miércoles, 23 de octubre de 2019 21:45
    miércoles, 23 de octubre de 2019 20:11