[ad_1]
みんな、おはよう。
ListView を備えた単純なフォームがあります (約 2800 のサプライヤー名が入力されています)。
これらの名前は、SQL 選択ステートメントの結果としてデータセット内に常駐します。
ユーザーは、探しているサプライヤーが見つかるまでサプライヤーのリストを単純にスクロールすることもできます (これには時間がかかりすぎるとユーザーから不満の声が上がっています)。または、ListView を選択し、サプライヤー名の最初の文字を入力すると、ListView が選択することもできます。入力された文字で始まる最初のサプライヤー。
ただし、1 文字だけでは不十分です。 ユーザーは、より多くの文字を入力してサプライヤー名に近づけることを望んでいます。
これを実現するために、それを実行できる「クイック検索」TextBox を組み込みました。
計画は、キー入力された各文字を取得し、データセットから DataRow (または dataRows) に選択し、Rowid を取得して、ListView 上で一致する項目を選択または複数選択することです。
私が抱えている大きな問題は、DataRow _Rowid にアクセスできないことです (デバッグ モードでは確認できます)。
VB
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Ssql = "SELECT SP_Name from Supplier Where SP_Name <> ' Select Supplier' ORDER BY SP_Name" da = New OleDb.OleDbDataAdapter(Ssql, cn) da.Fill(ds, "Suppliers") cn.Close() For x = 0 To ds.Tables("Suppliers").Rows.Count - 1 ListView1.Items.Add(New ListViewItem(ds.Tables("Suppliers").Rows(x).Item(0).ToString)) Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Dim RowNumber As String RowNumber = CStr(GetRowNumbers(TextBox1.Text)) End Sub Private Function GetRowNumbers(ByVal theSupplier As String) As String Dim Table As DataTable = ds.Tables("Suppliers") Dim Expression As String Dim FoundRows() As DataRow Expression = "SP_Name LIKE '" & theSupplier & "%'" FoundRows = Table.Select(Expression) If FoundRows.Count = 0 Then Return "Nothing Found" else Return CStr((FoundRows(0)(0))) '<<<<< RETURN THE ds.Tables("Suppliers") row number as found in FoundRows End If End Function
誰かがこれを行う方法をアドバイスしてください。
改めて、どうもありがとうございました。
解決策 1
[ad_2]
コメント