从查询更新网格

时间:2015-07-13 16:45:03

标签: sql vb.net datagridview

我有一个Visual Basic 2010应用程序,它使用DataGridView显示Microsoft Access 2010数据库中的频率列表。应用程序使用BindingNavigationPostionItem允许通过表进行导航。

Move Next Move Previous 按钮可以在列表中上下移动。很酷的是,当你这样做时,我有代码将FrequencyMode发送到我的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子句。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在您的代码中没有看到您应用过滤器的位置。所以,让我们假装您将整个表格加载到DataSet。然后,您可以使用DataSet.DefaultView或创建自定义DataView并将其分配给DataSource媒体资源 - 您这样做了。

现在,您所要做的就是将行过滤器应用于您使用的数据视图

view.RowFilter = "service = '" & cmbox1 & "'"

此时,您应该只能看到记录的子集,而Id字段不会发生任何事情。因为您的数据不会改变。

我怀疑,你改变了你的观点,这就是你遇到问题的原因。