如何在Gridview中显示数据库中的整个记录,还使用文本框进行过滤?
答案 0 :(得分:0)
有很多方法可以做到这一点,你接近问题的方式可能取决于许多相互关联的因素;每次用户进行搜索时,将合理返回多少条记录?默认情况下,列表是否应加载ALL记录,并且仅根据请求进行过滤,或者是否应该加载,并且只返回请求的记录?在合理使用条件下,DGV是否会加载整个表格内容,或只搜索一些记录,搜索后?
这些和其他注意事项可能会或可能不会影响您决定填写和执行过滤操作的方式。
这个例子是一个非常基本的方法,并没有使用一些ADO.NET细节,如DataSet,TableADapter等。相反,它将过滤作为beck-end操作执行,提交参数化查询并将结果集作为DataTable返回,然后可以将其直接设置为DGV控件的数据源。如果这引发了关于使用ADO.NET检索数据的方式和方法的争论(我的意思是,辩论),我将不会被高估。 。
无论如何,还有其他选择,鉴于我对您的设计知之甚少,我无法确定哪些是最实用和/或最有效的。一个例子是将完全填充的DataTable作为表单的私有类Memeber进行检索,然后使用输出作为Grid的DataSource对其执行DataView.RowFilter操作。这也有利有弊;主要是,对于有限大小的结果集,或者针对后端的数据访问遭受性能瓶颈的情况,它可能更好。
fianl note - 我的愚蠢示例在每次文本框中的文本发生变化时都会对搜索进行细化。根据您的需要,您可能需要进行设置,以便在用户按下按钮或输入键之前不执行搜索。
注意:这只是一个例子,任何这样的代码都应该通过异常处理进行改进,并根据您设计的性能要求进行调整!
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dgv As DataGridView = Me.DataGridView1
Me.UpdateSearch("")
End Sub
'A Function which returns a DataTable, to be used as the DataSource for a DataGridView:
Private Function ClientsDataTable(ByVal SearchCriteria As String) As DataTable
'The default popoulation of your Grid Control will determine how you
'contruct your SQL and/or set up you parameter(s); If you want it BLANK until the user enters a value in
'your textbox, you will need to modify some of the logic here . . . THIS extra-simple example
'fills the DGV with ALL records in the table if no parameter (and empty String) is passed:
Dim SQL As String = _
"SELECT ClientID, LastName, FirstName " & _
"FROM tblClient " & _
"WHERE LastName Like @LastName & '%'"
Dim dt As New DataTable
Using cn As New OleDb.OleDbConnection(My.Settings.CreateThisConnection)
Using cmd As New OleDb.OleDbCommand(SQL, cn)
cmd.Parameters.AddWithValue("@LastName", SearchCriteria)
cn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader
dt.Load(dr)
dr.Close()
cn.Close()
End Using
End Using
Return dt
End Function
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Me.UpdateSearch(Me.TextBox1.Text.Trim)
End Sub
Private Sub UpdateSearch(ByVal SearchCriteria As String)
Me.DataGridView1.DataSource = ClientsDataTable(SearchCriteria)
End Sub
End Class