首页 文章

使用BindingSource(Of CustomClassObjects)进行DataGridView过滤

提问于
浏览
5

我想过滤我的DataGridView数据 . 我的DataGridView的DataSource绑定到 BindingSource . BindingSource包含我的 clsBillHeader 类中的对象列表 .

这是第一段代码:

Dim bSource As New BindingSource
bSource.DataSource = clsBillHeader.GetAll()
dgvBills.DataSource = bSource
bSource.Filter = "JobNumber Like '100%'" //Filter doesn't actually work

GetAll()

Public Shared Function GetAll() As List(Of clsBillHeader)
    Dim mycn As New SqlConnection(connection)
    Dim mycmd As New SqlCommand("SELECT * FROM Headers", mycn)
    mycn.Open()
    Dim myreader As SqlDataReader = mycmd.ExecuteReader
    Dim myList As New List(Of clsBillHeader)
    While myreader.Read
        Dim item As New clsBillHeader()
        SetByReader(myreader, item) //Sets all values correctly (such as forein keys)
        myList.Add(item)
    End While
    mycn.Close()
    Return myList
End Function

这会成功返回我需要的所有值,如您在此屏幕截图中所示:

BindingSource


问题是它没有过滤任何东西......我的 JobNumber Like '100%' 似乎根本没有过滤 . 如下所示:

Unwanted Results

我应该得到前两个数字,但它返回其他一切......

Why am I not using DataView to use filtering?

好吧,DataView会让我使用直接绑定到SQL表的DataTable . 我的表中的一些值是外键,需要转换为比整数更有意义的东西 .

例如: FK_Author = 1 将是DataTable中的值 . 相反,我使用我的SetByReader将其转换为 Author = "Alex" . 这就是我想使用BindingSource的原因 .

我只需要过滤一个绑定到 clsBillHeaders 类的DataGridView . 有没有人有同样的问题?

编辑

看一下这个截图 . 显然它不支持过滤......

NoFilter Support

为什么我的BindingSource变量默认具有此功能?

2 回答

相关问题