Filtro en datagrid por fechas

Estoy tratando de ordenar una datagrid con filtro de fechas desde y hasta, el filtro me lo hace pero solo me toma el primero numero de la fecha ejemplo: 12/03/2009 y los otros no.
Espero que alguien me pueda ayudar se lo agradeceré mucho.
La base de datos es en access y el conector OLE y una datatimepicker lo de la fecha
Este es el código del datatimepicker.
Private Sub DateTimePicker2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged
Dim vista As New DataView
vista.Table = datos.Tables("Agendatb")
'filtro SQL
vista.RowFilter = "Fecha >= #" & DateTimePicker1.Text & "# AND Fecha <= #" & DateTimePicker2.Text & "#"
'nuevo origen del DataDrid: la vista personalizada
Me.Grid.DataSource = vista
'recargar el DataGrid
Me.Grid.Update()
Dim a As Integer
a = vista.Count
'Dim aviso4 As String = a & " Registros recuperados "
'MessageBox.Show(aviso4, "Filtrado", MessageBoxButtons.OK)
Me.Label2.Text = "Número de registros: " & a
End Sub

1 respuesta

Respuesta
1
Yo si te sirve de consuelo... paso mucho de filtros porque cuando trabajas contra bases en access hacen lo que quieren con las fechas. Yo en este tipo de rutinas, siempre cambio el selectcommand del datasource y a correr. También antes de insertar y hacer selects, convierto las fechas en formato canónico... si te sirve esta es la rutina que uso:
Public Shared Function fec(ByVal fecha As Date) As String
If IsDate(fecha) = True Then
Dim dia, mes, ano As Integer
dia = Day(fecha)
mes = Month(fecha)
ano = Year(fecha)
fec = CStr(ano) & "/" & Right(CStr(mes + 100), 2) & "/" & Right(CStr(dia + 100), 2)
Else
fec = ""
End If
End Function
y la usaria en plan "select * from agendatb where fecha >= #" & fec(fechica) & "#" ....
Y la cadena esa, al datasource. Selectcommand
después los databind por asegurarte el refresco y listo
Suerte :)
Gracias por tu intres lo probare...
De verdad gracias por tu tiempo.
Otra vez gracias mira no se a lo intente pero me dice que no es un valor dataTime Válido, ya no se que hacer he intentado de casi todo pero nada 3 días ya me come la cabeza esto.
Mira me filtra pero solo toma el primer numero dd/mm/yyyy solo me filtra los dd/ los otros ni por casualidad.
Yo intente diciéndole a access que la columna fecha era formato short y nada. Haber si me puedes echar una mano que ya tengo 3 días completos comiéndome la cabeza con esto, te lo agradecería mucho.
Mira este es el código.
Private conn As OleDbConnection = New OleDbConnection 'conexión de tipo OleDb
Private objDataSet As New DataSet()
Private adaptador As OleDbDataAdapter 'DataAdapter: adaptador de datos
Private datos As DataSet 'DataSet: conjunto de datos desconectados
Private enlaceBase As BindingManagerBase 
Private comando As OleDbCommandBuilder         'constructor de comandos para el DataAdapter
Private Sub Datagrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\500empresas.mdb;User Id=admin;Password=;"
adaptador = New OleDbDataAdapter("SELECT * FROM Agendatb ORDER BY Fecha", conn)
comando = New OleDbCommandBuilder(adaptador)
datos = New DataSet
'Abrir la conexión, el DataAdapter llena el DataSet,
conn.Open()
adaptador.Fill(datos, "Agendatb")
adaptadorcb.Fill(objDataSet)
Me.ComboBox1.DataSource = objDataSet.Tables(0)
Me.ComboBox1.DisplayMember = "Columna"
Me.ComboBox1.ValueMember = "tipo"
conn.Close()
'contar el número de registros que presenta el DataGrid
Call contar()
'cerrar la conexión
conn.Close()
'Y AKI STA EL CODIGO DEL DATATIMEPICKER!!!
Private Sub DateTimePicker1_ValueChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
Dim vista As New DataView
vista.Table = datos.Tables("Agendatb")
'filtro SQL
vista.RowFilter = " fecha >= #" & fec(DateTimePicker1.Text) & "#"
'nuevo origen del DataDrid: la vista personalizada
Me.Grid.DataSource = vista
'recargar el DataGrid
Me.Grid.Update()
Dim a As Integer
a = vista.Count
'Dim aviso4 As String = a & " Registros recuperados "
'MessageBox.Show(aviso4, "Filtrado", MessageBoxButtons.OK)
Me.Label2.Text = "Número de registros: " & a
End Sub
vista.RowFilter = " fecha >= #" & fec(DateTimePicker1.Text) & "#"
no he revisado el resto, pero esto te dara error... tienes que ponerlo asi:
& fec(cdate(datetimepicker1.text)) &
La función espera un tipo de datos date, no un string

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas