2016-10-26 1 views
1

データのコントロールを一杯にしようとしています。これらのコントロールには、コンボボックス、テキストボックス、日付/時刻などが含まれます。コントロール(コンボボックス、テキストボックス)をSQL Serverから選択されたデータで塗りつぶします。

私は最初にユーザーに選択/入力してレコードを保存させました。コンボボックスのために、私はテキストは、しかし、この場合、

ValueMember   DisplayMember 
100     Accounting 
101     Finance 

...例として、値を保存、表示、ユーザーが会計を選択した場合、私は今、私がしようとしている

100としてそれを保存しましたこれらのコントロールに正しいデータを入力し、このレコードを保存する時点の選択肢に設定します。

これはどのように私は、データを取得しています...

dim querystring as string 
dim count as integer 
QueryString = "Select FirstName, LastName, Dept, Position from TblClients where IdClient = 1112" 

    Dim cmd As New SqlCommand(queryString, Conn) 
    Conn.Open() 
    Using sdA As New SqlDataAdapter 
     Using dtA As New DataTable 
      sdA.SelectCommand = cmd 
      count = sdA.Fill(dtA) 
      If count <> 0 Then 
       MsgBox("Success") 
      End If 

      cboContactCategory.SelectedValue = dtA.Rows(0)("Dept").ToString 

     End Using 
    End Using 
    Conn.Close() 

姓= txtFirstです。 LastName = txtLast、Position = cboPosition、Dept = cboDept

これらの値を設定するにはどうすればよいですか?

txtFirst.Text = dtA.Rows(0).Item("FirstName") 
txtLast.Text = dtA.Rows(0).Item("LastName") 

あなたはデータバインディングを使用する場合がありますDataTable上に保持する場合:クエリを考える

+0

スニペットは行があるかどうかを確認する以外は何もしません。あなたが望むようなデータはデータテーブルにありますが、カウントの後にそれを放棄します。そのデータを取り出すか、データバインドを使用することができます – Plutonix

+0

Count Ifステートメントの後に行を追加しました。これらの行に沿って何か?事は、コントロールにデータを設定する前に、フィールドが空(NULL)でないことを確認する必要があります。それらのすべてが節約に必要なわけではありませんので、値があることを確認できるようにする必要があります – BobSki

答えて

1

は、あなたがDataTableが配置される前にデータを取り出すない、DataTableにいくつかのフィールドをロードしている

txtFirst.DataBindings.Add("Text", dtClients, "FirstName") 
txtLast.DataBindings.Add("Text", dtClients, "LastName") 

これらのコントロールには、現在の行の値が表示されます。

あなたがDataTableを保持し、その中にすべてのクライアントをロードする場合は、あなたが誰かを見つけるためのクエリを実行する必要はありません。

dtClients.DefaultView.RowFilter = String.Format("ID = {0}", intIdToFind) 
' text filter: 
dtClients.DefaultView.RowFilter = String.Format("Country = '{0}'", "Belgium") 

これは、1つのクライアントへのビューをフィルタリング、または内のすべてのものを必要に応じてベルギー。より多くのSQLを書いたり、DBに問い合わせたりする必要はありません。もちろん、数十万のクライアントがいる場合は、ベルギーのもの、過去60日間以内に注文したものなど、一度にサブセットをロードすることができます。

完全に設定されたDataAdapterは、すべての更新、削除を実行することもできます。場合によっては、テーブルごとに1つのSQL文しか必要ない場合もあります。例については、Searching values via a datagridviewを参照してください。

+0

私はそれを処分していますか? – BobSki

+1

'新しいDataTableとしてdtAを使用する' '使用中の終了 'は対象オブジェクトを破棄します...あなたが考えたい(入力する)いくつかのことがあります – Plutonix

+0

唯一の方法である時点でDataTableを使用し続けます私のことを成し遂げることができます。私は実際にはクライアントでdataGridをロードしてから、ダブルクリックすると別のフォームにユーザーを持ち、各コントロールのすべての情報(編集用)を表示するので、DefaultViewのアイデアが気に入っています。しかし、更新または削除では、私はSQL Serverで更新されていることを確認する必要があります。そうでなければ、あなたが記述した方法でそれを使用する理由はありません。 – BobSki

関連する問題