VB.net中的Datagridview过滤器

VB.net中的Datagridview过滤器,vb.net,filter,datagridview,Vb.net,Filter,Datagridview,我试图通过选择一段时间、一条路线或一个预算来过滤包含航班的datagridview 代码似乎对路线(RotaID)很有效,但对日期(DataHoraPartida)和预算(PrecoBase)无效 这是密码 Public Class FormProcurarViagem Private ListaViagens As New Viagens Private ListaRotas As New Rotas Private DataSetTemp As New DataSe

我试图通过选择一段时间、一条路线或一个预算来过滤包含航班的datagridview

代码似乎对路线(RotaID)很有效,但对日期(DataHoraPartida)和预算(PrecoBase)无效

这是密码

Public Class FormProcurarViagem
    Private ListaViagens As New Viagens
    Private ListaRotas As New Rotas

    Private DataSetTemp As New DataSet()

    Private DataSource2Grid As New BindingSource()


    Public Event EnviaDadosViagem(ByVal NovaReservaViagem As ReservaViagem)

        Private Sub FormReservas_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListaViagens = LerXML_Viagens()
        Me.ViagensBindingSource.DataSource = ListaViagens

        FillGrid()


        ListaRotas = LerXML_Rotas()

        With ComboBox1
            .DisplayMember = "RotaID"
            .ValueMember = "RotaID"
            .DataSource = ListaRotas
            .DataBindings.Add("SelectedValue", ViagensBindingSource, "RotaID", DataSourceUpdateMode.OnPropertyChanged)
        End With

        With ComboBox2
            Dim i As Integer
            Dim j As Integer

            For j = 0 To 10
                i = i + 50
                ComboBox2.Items.Add(i)
            Next j


        End With

        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "yyyy/MM/dd"
        DateTimePicker2.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "yyyy/MM/dd"

    End Sub

    Private Sub FillGrid()

          DataSetTemp.ReadXml("Viagens.xml")


        Dim tables As DataTableCollection = DataSetTemp.Tables

        Dim view1 As New DataView(tables(0))

        ViagensDataGridView.AutoGenerateColumns = True

        Me.Controls.Add(ViagensDataGridView)



        ' Create a BindingSource and set its DataSource property to the DataView.

        DataSource2Grid.DataSource = view1


        ' Set the data source for the DataGridView.

        ViagensDataGridView.DataSource = DataSource2Grid

    End Sub


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

        DataSource2Grid.Filter = String.Format("DataHoraPartida >= '{0:yyyy/MM/dd}' And DataHoraPartida <= '{1:yyyy/MM/dd}'", DateTimePicker1.Value.Date, DateTimePicker2.Value.Date)

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        DataSource2Grid.Filter = "PrecoBase <=" & Me.ComboBox2.Text
    End Sub


    Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted

        DataSource2Grid.Filter = "RotaID like '%" & Me.ComboBox1.Text & "%'"
    End Sub


End Class
公共类FormProCuraViaGem
私有ListaViagens作为新的Viagens
私人ListaRotas作为新的Rota
私有DataSetTemp作为新数据集()
作为新BindingSource()的专用数据源2Grid
公共活动EnviaDadosViagem(ByVal NovaReserviagem作为Reserviagem)
私有子表单Reservas_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
ListaViagens=LerXML_Viagens()
Me.ViagensBindingSource.DataSource=ListaViagens
FillGrid()
ListaRotas=LerXML_Rotas()
使用ComboBox1
.DisplayMember=“RotaID”
.ValueMember=“RotaID”
.DataSource=ListaRotas
.DataBindings.Add(“SelectedValue”,ViagensBindingSource,“RotaID”,DataSourceUpdateMode.OnPropertyChanged)
以
使用ComboBox2
作为整数的Dim i
作为整数的Dim j
对于j=0到10
i=i+50
ComboBox2.Items.Add(一)
下一个j
以
DateTimePicker1.Format=DateTimePickerPerformat.Custom
DateTimePicker1.CustomFormat=“yyyy/MM/dd”
DateTimePicker2.Format=DateTimePickerPerformat.Custom
DateTimePicker2.CustomFormat=“yyyy/MM/dd”
端接头
私有子网格()
datasetemp.ReadXml(“Viagens.xml”)
将表作为DataTableCollection=DataSetTemp.tables进行调整
Dim view1作为新数据视图(表(0))
ViagensDataGridView.AutoGenerateColumns=True
Me.Controls.Add(ViagensDataGridView)
'创建BindingSource并将其DataSource属性设置为DataView。
DataSource2Grid.DataSource=view1
'设置DataGridView的数据源。
ViagensDataGridView.DataSource=DataSource2Grid
端接头
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击

DataSource2Grid.Filter=String.Format(“DataHoraPartida>=”{0:yyyy/MM/dd}'和DataHoraPartida如果数据源中的数据不是类型
DateTime
,那么它应该是类型,因此您应该首先采取步骤来纠正这一点。然后,您可以通过设置列的
.DefaultCellStyle.Format
属性,在网格中应用所需的任何格式

一旦您实际拥有了正确类型的数据,您就可以根据文档对其进行适当的筛选。筛选实际日期如下所示:


DataSource2Grid.Filter=String.Format(“DataHoraPartida>={0:M/dd/yyyy}}”和DataHoraPartida={DateTimePicker1.Value:M/dd/yyyy}#首先,自己创建一个
DataView
几乎毫无意义。每个
DataTable
都已经有一个与之相关联的
DataView
,您可以通过它的
DefaultView
属性访问它。当您绑定
DataTable
时,数据实际上是由它的
DefaultView
生成的来自。这是因为
DataTable
实现了
IListSource
,其
GetList
方法返回其
DefaultView
。除非您想要同一个表的多个视图,否则只需将
DataTable
直接绑定到您的
BindingSource
。其次,这意味着什么:“在数据源中,日期格式为yyyy/MM/dd HH:MM"?格式仅在谈论文本时才相关。请告诉我,您的
数据表
不包含表示日期的
字符串
。日期应存储为.NET中的
日期时间
值,并且它们也应存储为数据库中的专用数据类型。只有当数据转换为显示。数据源中的数据(实际获取的数据类型应为
DateTime
)。