none
ORDENAR TABLA DINAMICA EN VB.NET

    Question

  • Hola de nuevo,

    Tengo un For que recorre varias colecciones de datos y se va rellenando una tabla dinamica. Todo funciona correctamente pero me encuentro con el problema de que deseo ordenar esa tabla, una vez rellena, por el campo precio.

    No sé si esto es posible o hay alguna forma de hacerlo. Elorigen de datos es de diferentes tablas de SQL y no puedo hacerlo en SQL.

    sI ME PODEIS AYUDAR OS LO AGRADECERIA.

    uN SALUDO.

    Friday, January 04, 2013 11:10 AM

Answers

  • se va rellenando una tabla dinamica

    que es una tabla dunamica ? es un datatable

    el problema de que deseo ordenar esa tabla, una vez rellena, por el campo precio

    te animas a usar linq ? o prefieres usar el sort del propio datatable

    Filtering and Sorting Directly in Data Tables

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, January 04, 2013 12:12 PM
  • Hola Miguel, mira, si quieres obtener mayores funcionalidades con los datos (ordenar, filtrar, etc), te recomendaría que cambiaras el uso de System.Web.UI.WebControls.Table por un control que realmente enlace a datos (uno al que le puedas asignar un datasource) como por ejemplo un GridView, Un DataList, Un repeater, etc. 

    Este articulo te puede ayudar con la elección del control a utilizar: http://panicoenlaxbox.blogspot.com/2010/09/controles-enlazados-datos-aspnet-i.html

    Otra opción, en el caso que debido a la lógica de tu aplicación exija que utilices el System.Web.UI.WebControls.Table, seria que antes de que llenaras la tabla con datos ordenaras la lista; para ello, puedes invocar el método Sort de la lista:

    http://msdn.microsoft.com/es-es/library/3da4abas(v=vs.90).aspx

    De manera nativa el System.Web.UI.WebControls.Table no tiene un método para ordenar ya que lo que hace este control es renderizar una tabla HTML en el cliente y no es un control que de manera nativa este enlazado a datos.

    Saludos.


    Camilo Bernal
    Desarrollador
    Bogotá, Colombia

    • Marked as answer by MiguelVB Friday, January 04, 2013 3:41 PM
    Friday, January 04, 2013 2:05 PM

All replies

  • ¿De qué tipo es la tabla? Si es un IEnumerable de cualquier tipo, la puedes ordenar fácilmente usando el método OrderBy de LINQ. Por ejemplo, supongamos que la tabla es un List(Of MiEntidad) y que MiEntidad contiene el campo Precio que mencionabas. La puedes ordenar así:

    Dim lista As New List(Of Mientidad)()
    '... (aquí la rellenas con tu bucle For) ...
    lista = lista.OrderBy(Function(ent) ent.Precio)


    • Edited by Alberto PoblacionMVP Friday, January 04, 2013 11:39 AM
    • Marked as answer by MiguelVB Friday, January 04, 2013 3:42 PM
    • Unmarked as answer by MiguelVB Friday, January 04, 2013 3:42 PM
    Friday, January 04, 2013 11:38 AM
  • se va rellenando una tabla dinamica

    que es una tabla dunamica ? es un datatable

    el problema de que deseo ordenar esa tabla, una vez rellena, por el campo precio

    te animas a usar linq ? o prefieres usar el sort del propio datatable

    Filtering and Sorting Directly in Data Tables

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, January 04, 2013 12:12 PM
  • Hola Leandro,

    El codigo que tengo es el siguiente:

    For Each Reg1 As CDistribuidores In LisDistribuidor
    
                        Fila = New TableRow
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (LisProducto(i).CodTipoBebida)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = Marca
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (LisProducto(i).Formato)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (Reg1.DisNombre)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = CStr((LisProducto(i).Descripcion))
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = CStr((Reg.Precio))
                        Fila.Cells.Add(Celdas)
                        TblDistribuidores.Rows.Add(Fila)
                    Next
                Next
            Next
           

    Yo lo que necesito es que el contenido de la Tabla Dinamica rellena de las filas adheridas, pueda, una vez llena, clasificarla por el campo de precio.

    NO se si me he explicado mejor ahora.

    Sin mas y en espera de noticias tuyas al respecto, recibe un cordial saludo.

    Miguel

    Friday, January 04, 2013 1:26 PM
  • Hola Alberto,

    El codigo que tengo es el siguiente:

    For Each Reg1 As CDistribuidores In LisDistribuidor
    
                        Fila = New TableRow
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (LisProducto(i).CodTipoBebida)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = Marca
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (LisProducto(i).Formato)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = (Reg1.DisNombre)
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = CStr((LisProducto(i).Descripcion))
                        Fila.Cells.Add(Celdas)
    
                        Celdas = New TableCell
                        Celdas.ForeColor = Drawing.Color.Black
                        Celdas.Width = 350
                        Celdas.Font.Size = 10
                        Celdas.Text = CStr((Reg.Precio))
                        Fila.Cells.Add(Celdas)
                        TblDistribuidores.Rows.Add(Fila)
                    Next
                Next
            Next
           

    Yo lo que necesito es que el contenido de la Tabla Dinamica rellena de las filas adheridas, pueda, una vez llena, clasificarla por el campo de precio.

    NO se si me he explicado mejor ahora.

    Sin mas y en espera de noticias tuyas al respecto, recibe un cordial saludo.

    Miguel

    Friday, January 04, 2013 1:26 PM
  • Hola Miguel, si la tabla que deseas ordenar es un "System.Data.Datatable", el método para ordenar dicha tabla es bastante sencillo:

    1     Dim MiTabla As System.Data.DataTable = Nothing

    2     MiTabla = PopulateTable()

    3     MiTabla.DefaultView.Sort = "CampoOrdenar Asc"

    Mira la línea 3; para ordenar la tabla, accedes a la propiedad DefaultView y luego modificas la propiedad Sort estableciendo la columna por la que se va a ordenar "CampoOrdenar" y el tipo de orden: Ascendente (ASC) o Descendente (Desc). Eso es todo lo que necesitas hacer.

     

    Espero haberte podido ayudar, si es así, no olvides marcar la respuesta como tal.

     

    Saludos,


    Camilo Bernal
    Desarrollador


    Friday, January 04, 2013 1:28 PM
  • Hola Camilo,

    La tabla es System.web.ui.webcontrols.table

    La instruccion que me mandas no la reconoce.

    Gracias y espero respuesta tuya si es posible.

    Friday, January 04, 2013 1:37 PM
  • Hola Miguel, mira, si quieres obtener mayores funcionalidades con los datos (ordenar, filtrar, etc), te recomendaría que cambiaras el uso de System.Web.UI.WebControls.Table por un control que realmente enlace a datos (uno al que le puedas asignar un datasource) como por ejemplo un GridView, Un DataList, Un repeater, etc. 

    Este articulo te puede ayudar con la elección del control a utilizar: http://panicoenlaxbox.blogspot.com/2010/09/controles-enlazados-datos-aspnet-i.html

    Otra opción, en el caso que debido a la lógica de tu aplicación exija que utilices el System.Web.UI.WebControls.Table, seria que antes de que llenaras la tabla con datos ordenaras la lista; para ello, puedes invocar el método Sort de la lista:

    http://msdn.microsoft.com/es-es/library/3da4abas(v=vs.90).aspx

    De manera nativa el System.Web.UI.WebControls.Table no tiene un método para ordenar ya que lo que hace este control es renderizar una tabla HTML en el cliente y no es un control que de manera nativa este enlazado a datos.

    Saludos.


    Camilo Bernal
    Desarrollador
    Bogotá, Colombia

    • Marked as answer by MiguelVB Friday, January 04, 2013 3:41 PM
    Friday, January 04, 2013 2:05 PM
  • Hola Camilo,

    Gracias por tu ayuda.

    Cambiaré la Tabla para poder utilizar los controles estandares.

    Un saludo.

    Hasta otra.

    Miguel

    Friday, January 04, 2013 3:41 PM
  • Ok, vale. No olvides compartir tu experiencia para que otros usuarios puedan resolver problemas similares.

    Un saludo


    Camilo Bernal
    Desarrollador
    Bogotá, Colombia

    Friday, January 04, 2013 3:42 PM