【发布时间】:2013-08-15 14:15:23
【问题描述】:
我想过滤我的 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
这成功返回了我需要的所有值,如您在此屏幕截图中所见:
问题是它没有过滤任何东西......我的JobNumber Like '100%' 似乎根本没有过滤。如下图:
我应该只得到前两个数字,但它会返回其他所有数字......
为什么我不使用 DataView 来进行过滤?
好吧,DataView 会导致我使用直接绑定到 SQL 表的 DataTable。我表中的一些值是外键,需要转换为比整数更有意义的值。
例如:FK_Author = 1 将是 DataTable 中的值。相反,我使用我的 SetByReader 将其转换为Author = "Alex"。这就是我想使用 BindingSource 的原因。
我只需要过滤绑定到clsBillHeaders 类的DataGridView。有人遇到过同样的问题吗?
编辑
看看这个截图。显然它不支持过滤...
为什么我的 BindingSource 变量默认有这个?
【问题讨论】:
-
BindingListView是什么? -
我认为
BindingListView是通用类,所以你必须使用BindingList(Of T) -
BindingList 类没有实现 IBindingListView 接口。除了
BindingSource和DataView之外,没有多少类可以这样做。我以为 BindingList 做到了,但不幸的是它没有...... -
对不起 BindingListView(Of T) ?
-
@SriramSakthivel 我编辑了我的问题,现在更清楚了
标签: c# vb.net datagridview bindingsource bindinglist