我有一个Visual Basic 2010应用程序,它使用DataGridView
显示Microsoft Access 2010数据库中的频率列表。应用程序使用BindingNavigationPostionItem
允许通过表进行导航。
Move Next 和 Move Previous 按钮可以在列表中上下移动。很酷的是,当你这样做时,我有代码将Frequency
和Mode
发送到我的Yeasu无线电,然后无线电设置为该频率/模式。
这很有效但是,如果我尝试按DataGridView
字段过滤Service
,则ID
字段会变为空白,导航不起作用。
以下是您选择要过滤的内容并单击过滤器按钮后运行的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cmbox1 As String
cmbox1 = ComboBox1.Text
MyConn = New OleDbConnection
MyConn.ConnectionString = connString
ds = New DataSet
tables = ds.Tables
da = New OleDbDataAdapter("Select * from HFUtil where service = '" & cmbox1 & "'", MyConn) '
da.Fill(ds, "HFUtil")
Dim view As New DataView(tables(0))
source1.DataSource = view
DataGridView1.DataSource = view
BindingNavigator1.BindingSource = source1
DataGridView1.Refresh()
BindingNavigator1.Refresh()
'=========================================================
ListBox1.Items.Clear()
ListBox1.Text = ""
For Each dr As DataRow In ds.Tables(0).Rows
Dim sItemTemp As String
sItemTemp = String.Format("{0} {1} {2}", dr("freq"), dr("mode"), dr("desc"))
ListBox1.Items.Add(sItemTemp)
Next
ComboBox2.Items.Clear()
ComboBox2.Text = ""
For Each dr As DataRow In ds.Tables(0).Rows
Dim sItemTemp As String
sItemTemp = String.Format("{0} {1} {2}", dr("freq"), dr("mode"), dr("desc"))
ComboBox2.Items.Add(sItemTemp)
Next
End Sub
此代码与表单加载上运行的代码之间的唯一区别是 - 数据适配器中的where子句。
我做错了什么?
答案 0 :(得分:0)
我在您的代码中没有看到您应用过滤器的位置。所以,让我们假装您将整个表格加载到DataSet
。然后,您可以使用DataSet.DefaultView
或创建自定义DataView
并将其分配给DataSource
媒体资源 - 您这样做了。
现在,您所要做的就是将行过滤器应用于您使用的数据视图
view.RowFilter = "service = '" & cmbox1 & "'"
此时,您应该只能看到记录的子集,而Id
字段不会发生任何事情。因为您的数据不会改变。
我怀疑,你改变了你的观点,这就是你遇到问题的原因。