2011-01-26 8 views

答えて

0

これを実行する方法はいくつありますが、どのような方法で問題に近づくかは、相互に関係する要素の数に依存する可能性があります。ユーザーが検索を完了するたびに返されるレコードはいくつですか?リストはデフォルトでALLレコードをロードし、要求に応じてフィルタリングするか、またはemplyをロードして、要求されたレコードのみを返すべきですか?妥当な使用条件の下では、DGVにはテーブルの内容全体、または検索後のレコードが少数しかロードされませんか?

これらのおよびその他の考慮事項は、フィルタリング処理をどのように実行してフィルタリングするかに影響する場合もあります。

この例はかなり初歩的なアプローチであり、DataSet、TableADapterなどのADO.NETの細部を使用していません。代わりに、パラメータ化されたクエリを送信し、その結果セットをDataTableとして返すことにより、DGVコントロールのデータソースとして直接設定することができます。これがADO.NETでデータを収集する方法と手段についての議論を開くならば、私は賞賛されません。 。 。

とにかく、その他の選択肢があります。あなたの設計についての限られた知識があれば、私は最も実用的かつ/または効率的なものを特定できません。 1つの例は、フォームのプライベートクラスメンバとして完全実装のDataTableを取得し、その出力をグリッドのDataSourceとして使用してDataView.RowFilter操作を実行することです。これには長所と短所があります。主に、限られたサイズの結果セットや、バックエンドに対するデータアクセスがパフォーマンスのボトルネックに苦しんでいる場合には、より良い場合があります。

私の愚かな例は、本質的に、テキストボックスのテキストが変更されるたびに検索を絞り込みます。ユーザーのニーズに応じて、ユーザーがボタンまたはEnterキーを押すまで検索が実行されないように設定することができます。

注:これは単なる一例であり、このようなコードは例外処理で洗練され、デザインの性能要件に適合する必要があります。

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 
+0

ないあなたは、「データベースからの全記録」の意味がわからいますが、各レコードの行全体をしたい場合は、使用してください「SELECT * FROM tablenameという。。。その他、各種」の代わりに「フィールド1、フィールド2を選択します。 ... " – XIVSolutions

関連する問題