Sql VB.net DataGridview过滤2013

Sql VB.net DataGridview过滤2013,sql,vb.net,winforms,datagridview,filter,Sql,Vb.net,Winforms,Datagridview,Filter,我创建了一个显示所有数据的Datagridview。我现在希望能够过滤我的数据。我使用的是DataSet、BindingSource和TableAdapter。我尝试了一些方法,但似乎没有任何效果。目前,我有一个文本框,在编写时应该进行过滤。当我执行并输入框时,它不会过滤或出错。下面是我的代码。我错过什么了吗 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DataGridView

我创建了一个显示所有数据的Datagridview。我现在希望能够过滤我的数据。我使用的是DataSet、BindingSource和TableAdapter。我尝试了一些方法,但似乎没有任何效果。目前,我有一个文本框,在编写时应该进行过滤。当我执行并输入框时,它不会过滤或出错。下面是我的代码。我错过什么了吗

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    DataGridView1.AllowUserToAddRows = True
    DataGridView1.AllowUserToDeleteRows = True

    Dim cn As SqlConnection = New SqlConnection("")
    adap = New SqlDataAdapter("SELECT res_snbr, First_Name, Last_Name, Item FROM Inventory_Details", cn)

    Dim builder As New SqlCommandBuilder(adap)
    adap.InsertCommand = builder.GetInsertCommand()
    'adap.UpdateCommand = builder.GetUpdateCommand()
    'adap.DeleteCommand = builder.GetDeleteCommand()

    dt = New DataTable()
    adap.Fill(dt)

    DataGridView1.DataSource = dt

End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If TextBox1.TextLength > 0 Then
        InventoryDetailsBindingSource.Filter = _
                String.Format("res_snbr Like '%" & TextBox1.Text) & "%'"
    Else
        InventoryDetailsBindingSource.Filter = String.Empty
    End If
End Sub

如果您的数据源是一个datatable,您可以尝试这样做

TryCast(InventoryDetailsBindingSource, DataTable).DefaultView.RowFilter = String.Format("Field = '{0}'", textBoxFilter.Text)
您可以在datatable上使用行筛选器属性,如下所示。

有很多方法可以实现您希望在这里做的事情,上面的代码就是我将如何做到的。除其他差异外,请注意BindingSource正被用作DataGridView的数据源,并且在设置BindingSource的Filter属性时正确使用了String.Format


干杯

它给出的值类型为“System.Windows.Forms.BindingSource”的错误无法转换为“System.Data.DataTable”。您的数据源的类型是什么?SQL Server如果这是您要问的问题否,它是DataTable吗?提供填充数据源的代码。如果有帮助,请尝试此操作。谢谢你------我研究了很久。。。。。还是不够。这很有效!!!我想我需要这个-InventoryDetailsBindingSource.DataSource=dt DataGridView1.DataSource=InventoryDetailsBindingSource
Imports System.Data.SqlClient
Public Class Form1
Dim cn As New SqlConnection("Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=")
Dim adap As New SqlDataAdapter("SELECT res_snbr, First_Name, Last_Name, Item FROM Inventory_Details", cn)
Dim builder As New SqlCommandBuilder(adap)
Dim dt As New DataTable
Dim InventoryDetailsBindingSource As New BindingSource
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    adap.InsertCommand = builder.GetInsertCommand()
    adap.Fill(dt)
    InventoryDetailsBindingSource.DataSource = dt
    DataGridView1.DataSource = InventoryDetailsBindingSource
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If TextBox1.TextLength > 0 Then
        InventoryDetailsBindingSource.Filter = String.Format("res_snbr Like '%{0}%'", TextBox1.Text)
    Else
        InventoryDetailsBindingSource.Filter = String.Empty
    End If
End Sub
End Class