读书人

Datagridview 查询有关问题

发布时间: 2013-07-16 22:38:04 作者: rapoo

Datagridview 查询问题
请教 (注:基本目的达到即可给分,能回答advance的更棒!):

Basic:Datagridview已经绑定一个Access,想通过输入查询内容后点击查询按钮,查询过程都在Datagridview里进行,光标自动移动到想到达的行上。但是不知道该怎么通过查询的信息得到该行号,倘若行号知道后,就能用下列语句移动光标了:

Cali_Record.FirstDisplayedScrollingRowIndex = index
Cali_Record.Rows(index).Selected = True

思路是这样的,但是进行不下去了…
Dim strTable As String = TextBox1.Text
Dim strSQL As String = "select * from " & strTable
。。。

Advance:
1. 每个TextBox绑定一个固定列,最好通过就查询该列得到行号(比如TextBox1的内容就在Columns(0)),既保证正确性,又提高搜索速度;
2. Index可能是多个数,比如查询后得到多个行号,这几行都要显示出来,最好是亮标;
3. 交叉查询功能(即通过TextBox1和TextBox2的搜索结果得到交集);
4. 模糊查询功能(即TextBox1输入的内容少个字符也可以查询到)。

问题比较多,望高手给予正解!
[解决办法]
正好今天有点时间,看了楼主的问题,写了下面代码,参照下吧,不能完全实现,但至少提供了思路,稍微变通应该能实现楼主要求把。


'1.Binding Access data with Datagridview

Dim tableName As String = "a"
Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb")

Dim sql As String = "select * from " & tableName

Dim conAdapter As New OleDb.OleDbDataAdapter(sql, con)
Dim ds As New DataSet
conAdapter.Fill(ds, tableName)

Dim dataTabelObj As DataTable = ds.Tables(tableName) '绑定的数据表
DataGridView1.DataSource = dataTabelObj

'2.查询特定内容 Rows
Dim selectValue As String = TextBox1.Text
'假定datagridview绑定的表 有四个字段:ID(key),Name,Address, Tel,与datagridview字段一一对应
'
Dim orderSelectDataRows As DataRow() = dataTabelObj.Select(String.Format("Name like %" & selectValue & "% or Address like %" & selectValue & "% or Tel like %" & selectValue & "%")) '表中的所有字段匹配查询下



'3得到查询结果表的 Key 列表,用于匹配datagridview用
Dim idList As New List(Of String)
For Each DataRow In orderSelectDataRows
idList.Add(DataRow.Item("ID")) '得到 Key的值
Next

'4.匹配 Datagridview
For Each DataRow As DataGridViewRow In DataGridView1.Rows

'楼主期待的功能 1:查询结果表的Key相匹配的话,改行就选中
If idList.Contains(DataRow.Cells("ID").Value) Then
DataRow.Selected = True
End If
Next

'楼主期待的功能 2:光标移动到选中的行上
If DataGridView1.SelectedRows.Count > 0 Then
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.SelectedRows(0).Index
End If

读书人网 >VB Dotnet

热点推荐