環境:Visual Stadio 2008 XP データはAccessのmdb
DataRepeaterに関しての本やサイトが少ないので誰かおしえて下さい。
DataRepeater(Form2)にてテーブルのデータを表示しています。さらにボタンを追加してクリックするとその行のデータについて表示し追加でその行のデータを追加できるようにしています(Form3)。
しかし追加して戻った際、DataRepeaterは変更前の状態で表示されています。ここにフィルターをかけたいのですがこのフォーム(Form2)が開く都度、フィルターがかかった状態で表示したいのですが、コーディング方法を教えて下さい。
【例えば】
テーブルdd
a b c
1 あ
2 い
※aは自動でNoを振っている
<<Form2>>
(form3呼出ボタン)a 1 c
(form3呼出ボタン)a 2 c
※cは空白です(まだ何も登録してないから)
<<Form3>>
a 1 c か(←ここを入力)
(登録ボタン)
※「(登録ボタン)」にてcの「か」を登録してform2に
戻るのですが、以前、上のform2の状態のままです。
結果としては
<<Form2>>
(form3呼出ボタン)a 2 c
のみ表示して欲しいです。フィルターはcかnullかどうか
もしくは0かどうか?
というコーディング方法をおしえて下さい。
No.2ベストアンサー
- 回答日時:
FILTER に設定する際の NULL 判定は以下のようにしてください。
BindingSource.Filter = "商品コード IS NULL"
もしくは
BindingSource.Filter = "LEN(商品コード) = 0"
また更新した結果が FORM2 に反映されない理由は簡単です。
クラスと変数の守備範囲つまりスコープ の概念を理解する必要があります。
■ Visual Basic 中学校 > 初級講座 >第8回 もっと変数
http://homepage1.nifty.com/rucio/main/dotnet/sho …
物理的にFORM3 で入力した情報を DB に更新をかけたとしても FORM2 のデータはそのままです。
だから 更新結果を反映するコードの工夫が必要になります。
もし、現状で Form2 でDB更新処理(Update,delete,新規追加)を行っているのであれば
案1、データを読み込みしなおす。
Form3を 開く際に Form3.ShowDialog() で開き、Form3 の処理を終えるまで
Form2 側の操作をさせないようにする。
FORM3の処理終えて Form2に戻ってきたときに 再度 DBデータを読み込みしなおす。
その際、フィルター処理などもリセットされるので 元に戻す必要があります。
当然カーソル(行)も変わってしまいます。
案2、1レコード(行:Row) ごとに更新を行わない。遅延更新で対応する。
Form3 で直接的なDBを更新せず。Form2でDB更新するようにします。
具体的には Form3 で入力、もしくは指示(削除、追加、更新)された結果を
Form3から Form2に 結果1レコード(行:Row)を引き渡すようにして
FORM2の DataSet の テーブルに対して作業を行うようにします。
テーブルの RowState を手がかりにして指示(削除、追加、更新)を判定します。
もしくは何らかの内部フラグを引き渡して 判定できるようにコードを工夫します。
参考:■Visual Basic 中学校 >第4回 DataTableの利用
http://homepage1.nifty.com/rucio/main/VBdotNet/D …
参考:■DataRow.BeginEdit メソッド
http://www.weblio.jp/content/DataRow.BeginEdit+% …
最後にForm2 の TableAdapter のUpdate メソッドで 更新する。
なお、ほかにもいろいろやり方は考えられますが。 上記の案でいかがでしょうか?
この回答への補足
いい感じで更新もできてきたのですが、教えてください。
処理速度としてはForm3で登録するのと、Form2で登録するのとどちらが処理が早く後々の事を考えるとどちらがメンテしやすでしょうか?
ご提案いただきました
「案1、データを読み込みしなおす。」ですが単純にForm3を開く際、Form2は閉じて、Form3からNewで呼び出したら更新されてるのかと思ったのですが、そう簡単ではなかったんですね・・・。
「FORM3の処理終えて Form2に戻ってきたときに 再度 DBデータを読み込みしなおす」方法を伝授していただけないでしょうか。
No.1
- 回答日時:
DataRepeater であろうがDataGridView でも どちらもおなじです。
1.BindingSourceクラス
http://msdn.microsoft.com/ja-jp/library/system.w …
DataRepeater の 上に載せているものが DBなどの項目であった場合
BindingSource のコントロールを使ってフィルターができます。
BindingSource.Filter = "商品コード = 'A0003'" という具合です。
2.DATaVIEW クラスを使ってフィルター
Dim dv As DataView
dv = New DataView(Me.TESTDataSet.売上テーブル, "商品コード = 'A003'", _
"商品コード ASC", DataViewRowState.CurrentRows)
3.DataTable クラスを使ってフィルター
http://msdn.microsoft.com/ja-jp/library/det4aw50 …
====
上記1が 回答に近いとは思いますけど。
この回答への補足
ありがとうございました。
数字でも判別ができるように(なぜなったか不明)なりました。
さらに質問なのですが、
---------------<<Form3>>
a 1 c か(←ここを入力)
(登録ボタン)
※「(登録ボタン)」にてcの「か」を登録してform2に
戻るのですが、以前、上のform2の状態のままです。
結果としては
<<Form2>>
(form3呼出ボタン)a 2 c
-------------------------
の部分で、以前リストアップされたままです。
これはテーブルの情報が更新されただけではダメで、親フォームの
c部分も反映してなからダメって事でしょうか?
毎回、お世話になっております。早々にありがとうございます。昨夜からチャレンジしているのですが思ったとおりの結果が出ません。おバカ度がばれてしまいそうですが・・・。
BindingSourceのプロパティーでfilterがあったので、そこへc=nullとしてもダメで、数値へ変更してみたのですがうまくいきません。今朝ももう少しチャレンジして再度ご連絡させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
コンボボックス
-
VB6 → EXCEL にデーター出力
-
GASでスプレッドシートの一番上...
-
ListViewで条件によって表示を...
-
1台のサーバへの同一セグメント...
-
VBAでページ番号、ページ最終行...
-
ASP C# データベースから1行取得
-
VBAの問題がわからないのでどな...
-
【ASP.NET MVC】一覧編集画面
-
Listviewのデータを上から順番...
-
スプレッドシート 一括でQRコー...
-
DataGridViewで表示に制限をつ...
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
VB.NETで DataRow()を利用して...
-
テキストボックスのvalueとtext...
-
count(*)で取得した値をJAVAの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
VBAでページ番号、ページ最終行...
-
.NET SqlDataReader のレコー...
-
MSFlexGridのデータ表示位置の設定
-
GridViewにバインドせずにデー...
-
【ASP.NET MVC】一覧編集画面
-
エクセルマクロ小数点桁数
-
VB6 → EXCEL にデーター出力
-
DataGridViewで表示に制限をつ...
-
yahoo天気の過去1ヶ月分のデー...
-
コンパイルエラーSubまたは...
-
C# データ配列から画像を作成す...
-
エクセルVBAによるマトリク...
-
VB.NETにてDB2のBLOB型のデータ...
-
GridViewを自動的にスクロール...
-
ListViewで条件によって表示を...
-
Visual C++ 6.0で ODBCを使用せ...
おすすめ情報