トップ回答者
メイン/サブフォームの連携について

質問
-
今回もよろしくお願いします。
VB2005とAccess2003で開発しています。
フォームに、データテーブル1の内容をテキストボックスで配置して、テーブル2をDataGridViewにして配置しています。メインがテーブル1、サブがテーブル2です。
メインには、日付と伝票№があり、サブにも日付と伝票№があるのでDataGridViewにフォーカスが移ったときに、自動的に日付と伝票№を表示するようにしています。
DataGridViewのエンターイベントに下記のコードを書いてます。
Private Sub DataGridView1_Enter( _
ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.Enter
Table1BindingSource.EndEdit()
End Subそれで、動作確認したところ、同じ日付の1回目の伝票はDataGridViewに問題なく、日付と伝票№が表示されるのですが、同じ日付で2回目に伝票№を変えて入力しようとすると、DataGridViewに伝票№は入るのですが、日付が入りません。新しい伝票を表示させる時に何か抜けている可能性があるのでしょうか?
メインの日付はDateTimePickerで表示しています。
自動表記するための別の方法がありましたら教えてください、よろしくお願いします。
回答
-
momo-yo さんからの引用 メインには、日付と伝票№があり、サブにも日付と伝票№があるのでDataGridViewにフォーカスが移ったときに、自動的に日付と伝票№を表示するようにしています。
ここを もう少し詳しく書いて頂けますか
サブとメインを連結させてると思いますが DataGridViewにフォーカスが移る時というのは DataGridViewから行を選択したときに テキストボックスに選んだ行の日付と伝票Noを表示させるということですかmomo-yo さんからの引用 それで、動作確認したところ、同じ日付の1回目の伝票はDataGridViewに問題なく、日付と伝票№が表示されるのですが、同じ日付で2回目に伝票№を変えて入力しようとすると、DataGridViewに伝票№は入るのですが、日付が入りません。新しい伝票を表示させる時に何か抜けている可能性があるのでしょうか?
ここの伝票Noを変えて入力するのは テキストボックスのことですか
テキストボックスに入力しても DataGridViewに反映されないと 読み取れたのですが 違いますか? -
かずbooさんこんにちは。返信ありがとうございました。
>メインには、日付と伝票№があり、サブにも日付と伝票№があるのでDataGridViewにフォーカスが移ったときに、自動的に日付と伝票№を表示するようにしています。
>DataGridViewから行を選択したときに テキストボックスに選んだ行の日付と伝票Noを表示させるということですか。
おっしゃるとおりです。行を選択したら日付・伝票№が表示できるようにしてあります。
>ここの伝票Noを変えて入力するのは テキストボックスのことですか
テキストボックスに入力しても DataGridViewに反映されないと 読み取れたのですが 違いますか?伝票№のテキストボックスには、NULL値を認めていないので自動表示されるように下記のようにプログラムをしました。同じ日付で伝票№を更新して入力するとき、伝票№はDataGridViewに入ります。DateTimePikerに自動で今日の日付が表示されるようにしてあるのですが、その日付がDataGridViewに反映されません。
Private Function GetLastNumber() As Integer '最終の伝票番号下2桁取得
'今日の日付
Dim key As String
key = Format(Today(), "yyyyMMdd")'今日の伝票を抽出
Dim dv As New DataView
dv.Table = DataSet1.test
dv.RowFilter = "伝票№ LIKE '" & key & "%'"
dv.Sort = "伝票№"'最終行番号
Dim rnum As Integer
rnum = dv.Count - 1'伝票番号
If rnum < 0 Then
'該当する伝票がないとき
GetLastNumber = 0
Else
'一番新しい伝票の番号
GetLastNumber _
= Val(Microsoft.VisualBasic.Right(dv(rnum)("伝票№"), 2))
End If最初の質問に記載したコードが、Autoincrementプロパティと関係があるかもしれません。伝票№は自動で更新されますが、日付は同じ日に何枚も伝票を入力するので、何の設定もしていません。
どうやってやったらいいかわかりませんが、DataGridViewに自動で表示するには別の方法がよいのかも?と思っています。
-
入力した 日付とNOはどうやって DataGridViewに反映させてるんですか?
テーブル2とDataGridViewを関連付けてるなら テーブル2にデータを追加すれば反映されると思うのですが
最初のコードは何の為に入れてるんですか?テキストボックスもテーブル2と関連付けてるのかなと思ったのですが それだと変更はできますが データを追加するのは 少しややこしいです。
このテキストボックスはデータ追加のため それとも変更のため どちらもかな?もしも 追加の為 或いはどちらもの場合ですと テーブルと関連付けたままでは 使いづらいかも
そんな場合は 私の場合 データを表示だけさせて すぐに関連を切り離すようにしています そして追加等のときは テーブルに直接追加してから関連を繋ぎ すぐに切るというのを繰り返してますが そんな感じのことがしたいのではないのかな?
すべての返信
-
momo-yo さんからの引用 メインには、日付と伝票№があり、サブにも日付と伝票№があるのでDataGridViewにフォーカスが移ったときに、自動的に日付と伝票№を表示するようにしています。
ここを もう少し詳しく書いて頂けますか
サブとメインを連結させてると思いますが DataGridViewにフォーカスが移る時というのは DataGridViewから行を選択したときに テキストボックスに選んだ行の日付と伝票Noを表示させるということですかmomo-yo さんからの引用 それで、動作確認したところ、同じ日付の1回目の伝票はDataGridViewに問題なく、日付と伝票№が表示されるのですが、同じ日付で2回目に伝票№を変えて入力しようとすると、DataGridViewに伝票№は入るのですが、日付が入りません。新しい伝票を表示させる時に何か抜けている可能性があるのでしょうか?
ここの伝票Noを変えて入力するのは テキストボックスのことですか
テキストボックスに入力しても DataGridViewに反映されないと 読み取れたのですが 違いますか? -
かずbooさんこんにちは。返信ありがとうございました。
>メインには、日付と伝票№があり、サブにも日付と伝票№があるのでDataGridViewにフォーカスが移ったときに、自動的に日付と伝票№を表示するようにしています。
>DataGridViewから行を選択したときに テキストボックスに選んだ行の日付と伝票Noを表示させるということですか。
おっしゃるとおりです。行を選択したら日付・伝票№が表示できるようにしてあります。
>ここの伝票Noを変えて入力するのは テキストボックスのことですか
テキストボックスに入力しても DataGridViewに反映されないと 読み取れたのですが 違いますか?伝票№のテキストボックスには、NULL値を認めていないので自動表示されるように下記のようにプログラムをしました。同じ日付で伝票№を更新して入力するとき、伝票№はDataGridViewに入ります。DateTimePikerに自動で今日の日付が表示されるようにしてあるのですが、その日付がDataGridViewに反映されません。
Private Function GetLastNumber() As Integer '最終の伝票番号下2桁取得
'今日の日付
Dim key As String
key = Format(Today(), "yyyyMMdd")'今日の伝票を抽出
Dim dv As New DataView
dv.Table = DataSet1.test
dv.RowFilter = "伝票№ LIKE '" & key & "%'"
dv.Sort = "伝票№"'最終行番号
Dim rnum As Integer
rnum = dv.Count - 1'伝票番号
If rnum < 0 Then
'該当する伝票がないとき
GetLastNumber = 0
Else
'一番新しい伝票の番号
GetLastNumber _
= Val(Microsoft.VisualBasic.Right(dv(rnum)("伝票№"), 2))
End If最初の質問に記載したコードが、Autoincrementプロパティと関係があるかもしれません。伝票№は自動で更新されますが、日付は同じ日に何枚も伝票を入力するので、何の設定もしていません。
どうやってやったらいいかわかりませんが、DataGridViewに自動で表示するには別の方法がよいのかも?と思っています。
-
入力した 日付とNOはどうやって DataGridViewに反映させてるんですか?
テーブル2とDataGridViewを関連付けてるなら テーブル2にデータを追加すれば反映されると思うのですが
最初のコードは何の為に入れてるんですか?テキストボックスもテーブル2と関連付けてるのかなと思ったのですが それだと変更はできますが データを追加するのは 少しややこしいです。
このテキストボックスはデータ追加のため それとも変更のため どちらもかな?もしも 追加の為 或いはどちらもの場合ですと テーブルと関連付けたままでは 使いづらいかも
そんな場合は 私の場合 データを表示だけさせて すぐに関連を切り離すようにしています そして追加等のときは テーブルに直接追加してから関連を繋ぎ すぐに切るというのを繰り返してますが そんな感じのことがしたいのではないのかな? -
かずbooさん、返信ありがとうございました。
コードを教えていただいてありがとうございました。なんとか表示させることができました。
最初に投稿した件ですが、自分で作ったFormを検証したところ、日付をDateTimePikerで表示させていたのですが、データを更新すると、DateTimePikerがなぜかNull値になっていたため、とわかりました。日付データが表示されているのに、Null値になっていました。それで、リンクするDataGridviewに反映されていなかったみたいです。(Null値だから反映していなかった)
フォームをロードしたときと、更新の時に
DateTimePiker1.text=Today()
としていたんですが、
DateTimePiker1.text=Now
としたら、Null値にならずにちゃんとDataGridViewの日付のところに反映されるようになりました。 Nowの3文字にたどり着くまで半日かかってしまいました
これから、かずbooさんに教えていただいたデータの接続と、切断のテクニックをもっと勉強して使いやすいFormを作りたいと思います。今回もありがとうございました。