none
recorrer datatable ordenado

    Question

  • Hola amigos.

    No consigo llenar "algo" con una tabla que quiero ordenar.

    lo intento con datatable.select pero no me sale.

    Explico lo que quiero:

    Necesito recorrer una datatable que tengo ya lleno desde una tabla de la base de datos SQL la cual no puedo modificar, solo traerla.

    Una vez en el datatable tengo que recorrerla dos veces una vez ordenada por un campo "Numero" y otra vez por otro campo "Codigo"

    ¿Podeis ayudarme?, bueno, en el caso de que me haya explicado bien, claro.

    Gracias

    Juan Carlos

     

    Monday, July 12, 2010 10:52 AM

Answers

  • Podrias hacer lo siguiente:

    dim arrFilasOrden() as DataRow = tutabla.Select("","campo1 ASC")

    for each row as Datarow in arrfilasOrden

    next

     

    o con una vista...

            Dim dtbdatos As New DataTable

            Dim vista As DataView = dtbdatos.DefaultView

            vista.Sort = "columna1 ASC"

            For Each row As DataRowView In vista

     

            Next


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    Monday, July 12, 2010 11:11 AM

All replies

  • Podrias hacer lo siguiente:

    dim arrFilasOrden() as DataRow = tutabla.Select("","campo1 ASC")

    for each row as Datarow in arrfilasOrden

    next

     

    o con una vista...

            Dim dtbdatos As New DataTable

            Dim vista As DataView = dtbdatos.DefaultView

            vista.Sort = "columna1 ASC"

            For Each row As DataRowView In vista

     

            Next


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    Monday, July 12, 2010 11:11 AM
  • "juancarlosdeveloper" escribió:

    > Necesito recorrer una datatable que tengo ya lleno desde una tabla de la base de datos SQL

    Juan Carlos, entiendo que para seleccionar una serie de registros existentes en el objeto DataTable, no es necesario recorrer un objeto DataTable, y menos aún, hacerlo dos veces.

    ¿Podemos conocer el motivo que te mueve a recorrer dos veces el objeto DataTable, prrimero ordenado por el campo "Numero" y después por el campo "Codigo"?

     


    Enrique Martínez [MS MVP - VB]
    Monday, July 12, 2010 11:21 AM
  • Ok. con la vista lo he solucionado, pero quizá es cierto que esto me da mucho trabajo, ya que lo tengo que recorrer.

    Os explico exactamente lo que quiero por que quizá sea mas facil con un group by y luego con un distint. pero no se aplicarlos a tablas.

    Yo en un datatable tengo una tabla que no puedo traer de otra forma desde la base de datos, luego disponemos de un datatable "MITABLA" que contiene lineas de albaran

    Luego he de grabar en otro sitio todos los artículos "CODIGO" que existen en ella, pero sumando las cantidades de  los que son iguales, ya que se trata de lineas de albarán y lo que necesito es que se sumen sus cantidades por que se repiten varias lineas de albaran del mismo producto. Vamos lo que es un resumen por producto. quizá aqui con un Group By.

    Luego he de grabar en otro sitio todos los "NUMERO" que existen en ella pero distintos, ya que se repiten lineas de albaran que apuntan al numero de albarán. solo he de grabar una vez por numero. quizá con un Distinct

    Lo unico que no se como usar esto atacando a la tabla en lugar de la base de datos con una consulta sql a la base de datos. NECESITO conseguirlo desde la tabla.

    Gracias

    Juan Carlos

     

    Monday, July 12, 2010 11:36 AM
  • hola

    cuando dices "NECESITO conseguirlo desde la tabla.", te refieres a usar una query contra la db ?

    si es asi podrias ser algo como esto

     

    SELECT CODIGO, SUM(NUMERO) FROM Articulos

    GROUP BY CODIGO

     

    Nota, no se si los nombres de los campos, y el de la tabla que use en el ejemplo son los correctos, en todo caso puedes modificarlos

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, July 12, 2010 12:27 PM
  • en el anterior mensaje puse una opcion consultando la tabla en tu db

    pero si ya tienes el datatable podrias usar linq para agrupar, o sino recorrerlos  usar en un coleccion generica, como ser un Dictionary <>

     

    la consulta seria, te animas a usar linq ?

    Dim lista As New Dictionary(Of String, Integer)

    For Each row As DataRow In dt.Rows

        If lista.ContainsKey(CStr(row("CODIGO"))) Then

            lista(CStr(row("CODIGO"))) += CInt(row("NUMERO"))

        Else

            lista.Add(CStr(row("CODIGO")), CInt(row("NUMERO")))

       End If

    Next

     

    Nota, dt seria el datatable que tienes con la info, nuevamente si los campos no son los correctos puedes modificarlos

    lo interesante del ejemplo es que recorres la lista y vas agrupando en el diccionario en donde la key del codigo sea igual sumas el nuevo numero, si no se encuantra lo agregas

     

    luego para procesar esta lista harias

     

    For Each item As KeyValuePair(Of String, Integer) In lista


        Console.WriteLine("codigo= {0}, numero= {1}", item.Key, item.Value)


    Next

    asi es como recorres el diccionario y peudes trabajar en el loop con cada dato agrupado

    seria mejor si suas linq pero con esta opcion tambien deberia funcionar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, July 12, 2010 12:35 PM
  • me quedo con lo que JTorrecilla me indicó aunque creo que se puede hacer mas facil.

    lo he conseguido así, recorriendo las dos tablas. y ordenando.

    Gracias a todos.

     

    Monday, July 12, 2010 5:41 PM