我想过滤我的 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
得到所有()
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
如您在此屏幕截图中所见,这成功返回了我需要的所有值:
问题是它没有过滤任何东西......我JobNumber Like '100%'
似乎根本没有过滤。如下图所示:
我应该只得到前两个数字,但它会返回其他所有数字......
为什么我不使用 DataView 来使用过滤?
好吧,DataView 会导致我使用直接绑定到 SQL 表的 DataTable。我表中的一些值是外键,需要转换为比整数更有意义的东西。
例如:FK_Author = 1
将是 DataTable 中的值。相反,我使用我的 SetByReader 将其转换为Author = "Alex"
. 这就是我想使用 BindingSource 的原因。
我所需要的只是通过绑定到类的 DataGridView 进行过滤clsBillHeaders
。有没有人有同样的问题?
编辑
看看这个截图。显然它不支持过滤...
为什么我的 BindingSource 变量默认有这个?