Ale*_*lex 5 c# vb.net datagridview bindinglist bindingsource
我想过滤我的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变量默认具有此功能?
啊,我现在明白这个问题了。实际上您的数据源不支持过滤。
BindingSource.Filter仅当您的数据源实现时才起作用IBindingListView
只有实现 IBindingListView 接口的底层列表支持过滤。
因此,要使其正常工作,您必须更改基础数据源。DataView如果您出于某种原因不想使用,请尝试使用BindingSource自身作为数据源。
编辑:此链接可能有助于如何支持过滤http://blogs.msdn.com/b/winformsue/archive/2008/05/19/implementing-filtering-on-the-ibindinglistview.aspx和http://blogs。 msdn.com/b/winformsue/archive/2007/12/07/implementing-the-ibindinglistview-for-filtering.aspx
希望这可以帮助
| 归档时间: | 
 | 
| 查看次数: | 15024 次 | 
| 最近记录: |