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%'
フィルタリングはまったく行われていないようです。以下に示すように:
最初の 2 つの数字だけを取得する必要がありますが、それ以外はすべて返されます...
フィルタリングを使用するために DataView を使用しないのはなぜですか?
さて、DataView を使用すると、SQL テーブルに直接バインドされた DataTable を使用することになります。私のテーブルの一部の値は外部キーであり、整数よりも意味のあるものに変換する必要があります。
例: FK_Author = 1
DataTable の値になります。代わりに、SetByReader を使用して に変換しAuthor = "Alex"
ます。だからこそ、BindingSource を使いたいのです。
必要なのは、のクラスにバインドされた DataGridView を介してフィルター処理することだけですclsBillHeaders
。誰かが同じ問題を抱えていますか?
編集
このスクリーンショットを見てください。どうやらフィルタリングをサポートしていないようです...
BindingSource 変数がデフォルトでこれを持っているのはなぜですか?