【问题标题】:VB.net DataGridview Filtering 2013VB.net DataGridview 过滤 2013
【发布时间】:2015-06-11 11:54:49
【问题描述】:

我创建了一个显示所有数据的Datagridview。我现在希望能够过滤我的数据。我正在使用DataSetBindingSourceTableAdapter。我尝试了一些东西,但似乎没有任何效果。目前我有一个TextBox,在编写时应该过滤。当我执行并在框中输入时,它不会过滤或出错。下面是我拥有的代码。我错过了什么吗?

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

【问题讨论】:

    标签: sql vb.net winforms datagridview filter


    【解决方案1】:

    如果你的数据源是一个数据表,你可以试试这个。

    TryCast(InventoryDetailsBindingSource, DataTable).DefaultView.RowFilter = String.Format("Field = '{0}'", textBoxFilter.Text)
    

    您可以在数据表上使用行过滤器属性,如此处所示。 http://www.csharp-examples.net/dataview-rowfilter/

    【讨论】:

    • 它给出了“System.Windows.Forms.BindingSource”类型的值无法转换为“System.Data.DataTable”的错误。
    • 你的数据源是什么类型的?
    • SQL Server 如果这就是你的要求
    • 不,它是数据表吗?提供填充数据源的代码。
    • 如果有帮助,试试这个。 stackoverflow.com/questions/20424219/…
    【解决方案2】:
    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
    

    这里有很多方法可以完成你想做的事情,上面的代码就是我会做的事情。除其他差异外,请注意BindingSource 被用作DataGridViewDataSource,并且在设置BindingSourceFilter 属性时正确使用String.Format

    干杯!

    【讨论】:

    • 谢谢你--------我已经研究了很久......仍然很短。效果很好!!!我想我需要这个 - InventoryDe​​tailsBindingSource.DataSource = dt DataGridView1.DataSource = InventoryDe​​tailsBindingSource
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多