如何过滤过滤的 DataGridView [VB 2010 Express / MS Access]

Posted

技术标签:

【中文标题】如何过滤过滤的 DataGridView [VB 2010 Express / MS Access]【英文标题】:How do I filter a filtered DataGridView [VB 2010 Express / MS Access] 【发布时间】:2015-02-22 17:16:50 【问题描述】:

那么如何过滤已经过滤的DataGridView呢?

我有一个名为“tbl_att”的表,其中包含以下列:id_num、att_date、status。

在我的表单中,有一个文本框 (txt_studnum) 用于过滤学号 (id_num)。代码是:

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

    provider2 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
    dataFile2 = "C:\DATABASE\rams.accdb" 
    connString2 = provider2 & dataFile2
    myConnection2.ConnectionString = connString2
    da = New OleDbDataAdapter("Select [IDNum], [att_date], [status] from tbl_att", myConnection2)
    da.Fill(ds, "tbl_att")


    Dim view1 As New DataView(tables(0))
    source1.DataSource = view1
    DataGridView1.DataSource = view1
    DataGridView1.Refresh()

    End Sub

而执行事件是通过点击一个按钮:

Private Sub btn_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_search.Click

 source1.Filter = "[IDnum] = '" & txt_idnumber.Text & "' "

End Sub

发生的情况是,用户将输入 ID 号,单击按钮,DataGridView (DataGridView1) 将显示过滤结果。

我想要做的是使用将过滤“状态”的组合框过滤 DGV1 中已过滤的数据。该组合框将包含“Present”、“Absent”和“Late”作为项目,对应于“status”列中的数据。

我尝试使用以下方法制作另一个用于过滤状态的按钮:

source1.Filter = "[status] = '" & cmb_status.Text & "' "

但 DGV 显示所有出席、缺席或迟到,无论 ID 号如何。希望任何人都可以帮助我。我也为糟糕的英语道歉。谢谢!

【问题讨论】:

显然 - 您需要组合数据视图的过滤器,例如 filter = "[status] = '0' AND [IDnum] = '1' " 然后您使用 source1.Filter = string.Format(filter,... 顺便说一句,您的 IDnum 是字符串吗? 那么,您不认为上面的解决方案是解决方案吗? string.format 比无休止的串联要干净得多。 【参考方案1】:

第二个过滤器使用:

source1.Filter = "[IDnum] = '" & txt_idnumber.Text & "'  AND [status] = '" & cmb_status.Text & "' "

【讨论】:

以上是关于如何过滤过滤的 DataGridView [VB 2010 Express / MS Access]的主要内容,如果未能解决你的问题,请参考以下文章

通过过滤器搜索在datagridview中显示多个值

DataGridVIew 填充匿名类型,如何过滤?

如何使用ComboBox过滤datagridview

如何使用 TextBox 过滤 DataGridView

如何根据组合框选择过滤datagridview

DataGridView列表有两行记录,如何根据id过滤出其中一条记录?