トップ回答者
テキストボックスに値を表示させたい

質問
-
VS2010を使っております。PCはXPです。
フォーム5で取引先名を検索、ヒットした取引先名の取引先コードをフォーム3のテキストボックス(以下テキストボックス)1に表示させます。テキストボックス2に印刷枚数、ラジオボタン1から3(敬称)のいずれかを選択します。ボタン9をクリックして以下を行っています。取引先コードをキーにして取引先名、住所、郵便番号をデータテーブル(以下DT)に引き渡します。フォーム3のテキストボックス3から8に、郵便番号、住所1、住所2、取引先名、印刷枚数、敬称を表示させ、テキストボックス11に取引先名△敬称△印刷枚数を表示させています。 △はスペースです。そしてデータグリッドビュー(以下DGV)1にDTの内容を表示させています。
1回の検索では問題ないのですが、複数回検索すると、DGVにはDTの内容は表示されますが、テキストボックス3から6の表示がされず、テキストボックス11にも取引先名が表示されません。
複数回検索しても、テキストボックス3から6の表示、テキストボックス11にも取引先名が表示されるようにするにはどうすれば良いでしょうか?
Public Class Form3
Dim dt As DataTable
Public Sub New()
InitializeComponent()
dt = New DataTable
End Sub
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
Dim Cn As New OleDbConnection
Dim Command As OleDbCommand = New OleDbCommand
Dim OLEDBCon As OleDb.OleDbConnection = _
New OleDb.OleDbConnection
OLEDBCon.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\temp\test.mdb;" & _
"Persist Security Info=False"
Command.Connection = OLEDBCon
Command.CommandText = "select 郵便番号, 住所1, 住所2, 取引先名 from 取引先名T where 得意先コード = @取引先コード "
Command.Parameters.AddWithValue("@取引先コード", TextBox1.Text)
Dim Adapter As OleDbDataAdapter = New OleDbDataAdapter
Adapter.SelectCommand = Command
Adapter.Fill(dt)
'レコード取得
If dt.Rows.Count = 1 Then
TextBox3.Text = CStr(dt.Rows(0).Item(0))
TextBox4.Text = CStr(dt.Rows(0).Item(1))
TextBox5.Text = CStr(dt.Rows(0).Item(2))
TextBox6.Text = CStr(dt.Rows(0).Item(3))
Else
MessageBox.Show("表示不可", "エラー")
End If
'印刷枚数
Dim d As String = TextBox2.Text
TextBox7.Text = d
'敬称
If RadioButton1.Checked = True Then
TextBox8.Text = RadioButton1.Text
ElseIf RadioButton2.Checked = True Then
TextBox8.Text = RadioButton2.Text
ElseIf RadioButton3.Checked = True Then
TextBox8.Text = RadioButton3.Text
ElseIf RadioButton4.Checked = True Then
TextBox8.Text = RadioButton4.Text
End If
'取引先名
Dim a As String
a = TextBox6.Text
'敬称
Select Case True
Case RadioButton1.Checked = True
a &= " " & RadioButton1.Text
Case RadioButton2.Checked = True
a &= " " & RadioButton2.Text
Case RadioButton3.Checked = True
a &= " " & RadioButton3.Text
End Select
'テキストボックス11に表示
a &= " " & TextBox2.Text & "枚" & vbCrLf
TextBox11.AppendText(a)
'DTの内容をDGVで確認
DataGridView1.DataSource = dt
End Sub
End Class
長いコードを見て頂きありがとうございます。
宜しくお願い致します。
回答
-
dt、すなわちデータテーブルは最初の検索では1行ですが、2回目からの検索では複数行になります。よって、
If dt.Rows.Count = 1 Then
という条件に当てはまらなくなり、TextBox3からTextBox6にセットされなくなるのでしょう。
また、If dt.Rows.Count = 1 Thenを削除したとしても、以下のコードのままではうまくいかないでしょう。なぜなら、1行目をセットしているからです。
TextBox3.Text = CStr(dt.Rows(0).Item(0))
TextBox4.Text = CStr(dt.Rows(0).Item(1))
TextBox5.Text = CStr(dt.Rows(0).Item(2))
TextBox6.Text = CStr(dt.Rows(0).Item(3))
セットするのであれば、おそらく最後の行の値を使わなければなりません。例えば、以下のようになると思います。
TextBox3.Text = CStr(dt.Rows(dt.Rows.Count - 1).Item(0))
ところで、なぜ、If dt.Rows.Count = 1 Thenという条件を入れているのでしょうか? 意味を正しく理解してコードを書かれていますか? 自分が書いたコードが何を行っているのかを完全に理解しなければ、このような不具合には対応できません。
まず、そこから初めてみて下さい。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
すべての返信
-
dt、すなわちデータテーブルは最初の検索では1行ですが、2回目からの検索では複数行になります。よって、
If dt.Rows.Count = 1 Then
という条件に当てはまらなくなり、TextBox3からTextBox6にセットされなくなるのでしょう。
また、If dt.Rows.Count = 1 Thenを削除したとしても、以下のコードのままではうまくいかないでしょう。なぜなら、1行目をセットしているからです。
TextBox3.Text = CStr(dt.Rows(0).Item(0))
TextBox4.Text = CStr(dt.Rows(0).Item(1))
TextBox5.Text = CStr(dt.Rows(0).Item(2))
TextBox6.Text = CStr(dt.Rows(0).Item(3))
セットするのであれば、おそらく最後の行の値を使わなければなりません。例えば、以下のようになると思います。
TextBox3.Text = CStr(dt.Rows(dt.Rows.Count - 1).Item(0))
ところで、なぜ、If dt.Rows.Count = 1 Thenという条件を入れているのでしょうか? 意味を正しく理解してコードを書かれていますか? 自分が書いたコードが何を行っているのかを完全に理解しなければ、このような不具合には対応できません。
まず、そこから初めてみて下さい。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/