Colaboraciones en el Guille

Filtrando un DataView por fechas

Uso de RowFilter

Fecha: 27/May/2006 (22 de Mayo de 2006)
Autor: MCSD .Net Ing. Fernando Luque Sánchez - fls2307@hotmail.com

 


Sres. Desarrolladores, reciban un afectuoso saludo, aqui estoy nuevamente con la satisfacción de haber logrado la certificación MCSD .Net hace algún tiempo y es por eso que me alejé un poco de las publicaciones, pero ya estoy nuevamente para compartir y ayudar.

El Ejemplo

Este ejemplo lo publico debido a una consulta de otro colega, he desarrollado un pequeño ejemplo que se lo envié y ahora lo publico. Este ejemplo permite especificar un rango de fechas y filtrar una vista usando RowFilter.

Para ordenar y filtrar un DataView pueden visitar:
http://www.elguille.info/colabora/NET2005/FernandoLuque_FiltrosOrdenamientos.htm

Para el uso del control ListView
http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListView.htm
http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListViewII.htm
http://www.elguille.info/colabora/NET2005/FernandoLuque_ListViewAvanzado.htm

El formulario inicial tiene el siguiente diseño:

Aplicación en N Capas..un ejemplo

Al filtrar las órdenes de Enero de 1997, usando Northwind se muestra como sigue, notese como se muestra la etiqueta con la cantidad de órdenes.

Aplicación en N Capas..un ejemplo

Nota: Como he puesto en el código a manera de comentario, faltan las consistencias al especificar el rango de fechas. La idea principal es manejar y construir de manera correcta la cadena de filtro.

A continuación sigue código en Visual Basic:

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1
    Inherits System.Windows.Forms.Form

    'La conexion
    Dim cn As SqlConnection
    'El SQLDataAdaptar
    Dim daOrdenes As SqlDataAdapter
    'El DataSet
    Dim dsDatos As DataSet
    'La Vista
    Dim dvOrdenes As DataView

El código al cargar el formulario 

    Private Sub Cargar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cn = New SqlConnection("user id=SA;data source=.;persist security info=False;initial catalog=Northwind")

        daOrdenes = New SqlDataAdapter("Select orderid, orderdate,freight  from orders order by orderdate", cn)

        dsDatos = New DataSet

        daOrdenes.Fill(dsDatos, "Ordenes")

        LlenarlistaOriginal()

    End Sub

Llenar la lista sin filtro 

    Private Sub LlenarlistaOriginal()
        For i As Integer = 0 To dsDatos.Tables("Ordenes").Rows.Count - 1

            lvOrdenes.Items.Add(dsDatos.Tables("Ordenes").Rows(i)("OrderId"))

            lvOrdenes.Items(i).SubItems.Add(Format(dsDatos.Tables("Ordenes").Rows(i)("OrderDate").ToString, "Short Date"))

            lvOrdenes.Items(i).SubItems.Add(dsDatos.Tables("Ordenes").Rows(i)("Freight").ToString)

        Next
    End Sub

  El botón filtrar

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

         ' ********   SOLO FALTA LA CONSISTENCIA DE LAS FECHAS DE INICIO Y FIN   *****

         'La Cadena de filtro

        Dim vFechas As String

        vFechas = "OrderDate >= " + "'" + Convert.ToString(Format(Me.dtInicio.Value, "Short Date")) + "'"

        vFechas &= "and OrderDate <= " + "'" + Convert.ToString(Format(Me.dtFinal.Value, "Short Date")) + "'"

        'Instancia de la Vista

        dvOrdenes = New DataView(dsDatos.Tables("Ordenes"), vFechas, "OrderDate ASC", DataViewRowState.OriginalRows)

        'Limpiar lo que existe

        Me.lvOrdenes.Items.Clear()

        ' Llenar la Vista con el resultado

        For i As Integer = 0 To dvOrdenes.Count - 1

            lvOrdenes.Items.Add(dvOrdenes.Item(i).Item(0).ToString)

            lvOrdenes.Items(i).SubItems.Add(Format(dvOrdenes.Item(i).Item(1).ToString, "Short Date"))

            lvOrdenes.Items(i).SubItems.Add(dvOrdenes.Item(i).Item(2).ToString)

        Next

        lblsinFiltro.Text = CType(dvOrdenes.Count, String) + " órdenes"

    End Sub

End Class

El código completo se encuentra en el archivo adjunto. Bájalo y no te olvides de votar, tus puntos me alientan a seguir compartiendo.

Suerte a todos y a seguir desarrollado.

MCSD .Net Ing. Fernando Luque Sánchez
De Trujillo - Perú para todo el mundo


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SQLClient


Fichero con el código de ejemplo: FernandoLuque_DataViewFiltroFechas.zip - (09) KB

(MD5 checksum: [1EE91CEAB98045EBCA324DCB3D1786CE])


ir al índice principal del Guille