• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB DataRepeaterにて条件で表示)

VB DataRepeaterで条件を満たすデータを表示する方法

このQ&Aのポイント
  • Visual Studio 2008とXPの環境下で、DataRepeater(Form2)を使用してテーブルのデータを表示しています。さらに、追加ボタンをクリックするとその行のデータを追加できるようにしています(Form3)。しかし、データを追加して戻った場合、DataRepeaterは変更前の状態で表示されます。そこで、Form2が開くたびにフィルターがかかった状態で表示する方法を教えてください。
  • 具体的な例として、テーブル「dd」のカラム「a」「b」「c」があります。カラム「a」は自動的にNoを振っています。Form2では、以下のように表示されています。「(Form3呼出ボタン) a 1 c」「(Form3呼出ボタン) a 2 c」。カラム「c」はまだ何も登録されていないため、空白です。Form3では、カラム「a」「b」「c」を入力し、「(登録ボタン)」を押してForm2に戻ります。しかし、戻った後も以前のForm2の状態が表示されてしまいます。結果として、Form2では「(Form3呼出ボタン) a 2 c」のみ表示したいです。
  • フィルターの条件としては、カラム「c」がnullまたは空白であるか、0であるかのいずれかで判断したいです。このようなコーディング方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

FILTER に設定する際の NULL 判定は以下のようにしてください。 BindingSource.Filter = "商品コード IS NULL" もしくは BindingSource.Filter = "LEN(商品コード) = 0" また更新した結果が FORM2 に反映されない理由は簡単です。  クラスと変数の守備範囲つまりスコープ の概念を理解する必要があります。 ■ Visual Basic 中学校 > 初級講座 >第8回 もっと変数 http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard8.htm 物理的に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/Database/Database4.htm       参考:■DataRow.BeginEdit メソッド http://www.weblio.jp/content/DataRow.BeginEdit+%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89  最後にForm2 の TableAdapter のUpdate メソッドで 更新する。   なお、ほかにもいろいろやり方は考えられますが。 上記の案でいかがでしょうか?

juujuu2929
質問者

お礼

毎回、早々に沢山のご指導ありがとうございます。 チャレンジしてみます。しばしお時間を・・・。

juujuu2929
質問者

補足

いい感じで更新もできてきたのですが、教えてください。 処理速度としてはForm3で登録するのと、Form2で登録するのとどちらが処理が早く後々の事を考えるとどちらがメンテしやすでしょうか? ご提案いただきました 「案1、データを読み込みしなおす。」ですが単純にForm3を開く際、Form2は閉じて、Form3からNewで呼び出したら更新されてるのかと思ったのですが、そう簡単ではなかったんですね・・・。 「FORM3の処理終えて Form2に戻ってきたときに 再度 DBデータを読み込みしなおす」方法を伝授していただけないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

DataRepeater であろうがDataGridView でも どちらもおなじです。 1.BindingSourceクラス http://msdn.microsoft.com/ja-jp/library/system.windows.forms.bindingsource.filter.aspx   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(VS.80).aspx ====   上記1が 回答に近いとは思いますけど。

juujuu2929
質問者

お礼

毎回、お世話になっております。早々にありがとうございます。昨夜からチャレンジしているのですが思ったとおりの結果が出ません。おバカ度がばれてしまいそうですが・・・。 BindingSourceのプロパティーでfilterがあったので、そこへc=nullとしてもダメで、数値へ変更してみたのですがうまくいきません。今朝ももう少しチャレンジして再度ご連絡させていただきます。

juujuu2929
質問者

補足

ありがとうございました。 数字でも判別ができるように(なぜなったか不明)なりました。 さらに質問なのですが、 ---------------<<Form3>>  a 1 c か(←ここを入力)  (登録ボタン) ※「(登録ボタン)」にてcの「か」を登録してform2に 戻るのですが、以前、上のform2の状態のままです。 結果としては <<Form2>> (form3呼出ボタン)a 2 c ------------------------- の部分で、以前リストアップされたままです。 これはテーブルの情報が更新されただけではダメで、親フォームの c部分も反映してなからダメって事でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 結果を引き継いで別フォームへ表示するには?

    環境:Visual Stadio 2008 XP データはAccessのmdb ※AAAメインフォームにAボタン(aa子フォーム)Bボタン(bb子フォーム)あり。それぞれクリックで呼び出される。 (1)Aボタンクリックでaaフォームに入力(例:TextBox1にねこを入力)  登録後、画面を閉じる (2)Bボタンクリックでbbフォームを表示、こちらはDataRepeaterがあり  (1)で登録したmdbデータがリストアップされる。  各データの前にccボタンを配置している  (呼出) 01 ねこ  (呼出) 02 いぬ (3)(2)の状態で呼び出したいデータのccボタンをクリックすると  そのNoのデータが入ったaaフォームを呼び出したい  (2)の「01 ねこ」の(呼出)ボタンをクリックすると  TextBoxに「ねこ」が入った状態のaaフォームを呼び出したい このような動きを望んでおりますが、呼び出しまではセットできたのですが、選択したデータをセットする方法がわかりません。 どうやって結果を引っ張って着たらよいかおしえて下さい。

  • VB6で2つのFormを使ってプログラムについて

    環境:WindowsXp VB6(SP?) 操作:2つのフォーム(1と2)1からエクセルのデータを呼び込み⇒表示⇒さらにデーター追加⇒     コマンドボタンを押して2を表示⇒一部1のデータをラベルに表示してさらにデータ追加⇒     コマンド」ボタンを押して1と2のデータをエクセルの帳票に登録・保存     以上のことを繰り返す。     この間2フォームの登録・保存で2のフォームはアンロードする。 質問:1順目はうまくいくのですが、2順目になると、パブリック変数を使用して、テキストやラベルに表    示された、ものはうまくデーターが反映されるが、それ以外は、フォーム上では表示されていて     もdebug.printすると、データーが空欄になっているため、登録・保存できない。     例:'****Form1***** Public ex As String Form2.Show End Sub '******Form2******** Private Sub Form_Load() Label1 = Form1.ex End Sub このとき、2順目のForm1.exは””でもForm2のLabel1にはデーターが表示されている。             なにがいけないのかが、いろいろネットで調べてもよくわからないので、どなたか教えてくだ      さい。(initilizeとかをせっていすべきなのか?)      ただ、まだVB6をはじめて半年ほどですので、よろしくおねがいいたします。

  • VB Formの非表示について

    質問が以下の通りです。 1 VBでForm1(親Form),Form2(子Form)を作成 2 Form1(親Form)を隠れた状態で、まず認証用のForm2(子Form)を呼出 3 Form2での認証入力が通ったら、Form2を閉じて、Form1を表示させる   逆にFormを閉じる ということがしたいです。 いつも、素人のような質問にすみませんでした。 宜しくお願いします。

  • エクセル 条件を満たすデータの数を表示させたい

    以下のデータにおいて、条件を満たす行数を表示させたく、COUNTIF関数、SUMPRODUCT関数など試してみたのですが、なかなか上手くいきません。どなたかご教授お願い致します。 得たい結果としては、 A1のセルに、A列に『田中』という文字が入っていてかつC列の値が『0以上24以下』の条件を満たす行の数を表示させたい。   _A_ _B_ _C_ _D_ _E_ _F_ 1  2 氏名   TEL  年齢  3 佐藤        24 4 田中        34 5 田中        12 6 日笠        88 7 田中        34 8 田中        20 9 伊藤        23 オートフィルタ、ピボットテーブルで数える事も可能ですが、データが都度変わるので、関数で表示させたいのです。 宜しくお願い致します。

  • 【ACCESS】フォームのデータでテーブル作成

    写真のようなフォーム上に「既設のフィールドの追加」でテーブルの値を追加し、分割フォームでデータを表示するフォームがあります。その後フォーム上のテーブルでフィルターをかけて、その状態のテーブルに対してクエリなどの処理をしたいと思いっております。 そこでフィルターをかけた状態のテーブルのデータを他のテーブルへ追加または新規作成することは可能でしょうか? 写真だと「フィールド1」をフィルタ「あ」をかけてあだけのデータを表示させてその状態のテーブルを別のテーブルへ追加または新規作成したいです。 実際のテーブルには100以上の項目があり使用者によってフィルタをかける項目も違うため自由にフィルタをかけた状態で別のテーブルへデータを追加したいと考えています。 拙い説明で申し訳ありませんがご指導よろしくお願いいたします。

  • Excel条件にあうデータを表示したい

    Excelシートに ----------------------------------------    A    B     C    D 1  日付  社名  担当者  品名 2 06/07/01 ○     △    × 3 06/07/02 **     △    ◇ 4 06/07/01 □    ▲    ◎ ---------------------------------------- というようなデータがたくさん入力されています。 1行目のタイトルのとこがドロップダウンになっており、その列に入力されているすべてのデータを表示して、ある単語を選択するとその該当するデータのみを表示したいのですが、どのようにしたらよいのでしょうか。 上の表で、 たとえば、C1の担当者のところのドロップダウンメニューで「△」を選択すると、2行目の3行目のデータのみを表示します。 そして、C1の担当者のところのドロップダウンメニューで「すべて」を選択すると、上表の状態に(2行目から4行目のデータを表示)戻したいのです。 参考になるサイトなどもご存知でしたら教えて下さい。

  • テーブルのデータをテキストボックスに表示させるには?II

    先日、同じ質問しましたが、 回答はあったものの、解決出来ずに、困っています!! どなたか、助けてください! Formに約10個のテキストボックスがあり、そこにはあるテーブルのデータが表示されるようになっています。 そこで、もう一つ表示させたいデータがあったので 1)Formにテキストボックスを1個追加し、 2)テーブルに一つフィールドを追加し、 3)テーブルにデータを入れるためのINSERT文を修正し、 4)実行してみました。 が、テキストボックスには #Name? が表示されて、どうも思ったと通りに動きません。 テーブルを確認すると、データはちゃんと入っていますが、テキストボックスにはどうしても値が入ってきません。 また、追加前の状態の約10個のテキストボックスには、ちゃんとデータが渡ってきます。 このたび追加したテキストボックスだけがダメです。 テキストボックスの作成方法がNGなのでしょうか? よろしくお願いします。m(__)m

  • ピボットテーブルでフィルターチェックを入れ更新

    ピボットテーブルを作成し、 項目A 項目B 項目C 項目D 項目E というように行が並んでいて、項目Cと項目Eを除外したい場合、フィルターアウトします。 2つ条件があるので、ラベルフィルターは使えず、手動でチェックを外すことになると思います。 その後で、元データに「項目F」というのが増えた場合、フィルターアウトされた(チェックが外れた)状態で追加されます。 これをフィルターアウトせずに、チェックを入れた状態で追加するようなオプションや方法はありますか?

  • 【VB.NET2003】フォーム1を閉じてフォーム2を表示させたい

    プログラミング初心者でVB.NET2003使用です。 検索したところ、それらしいものがあったのでチャレンジしましたがダメだった(ちょっと違う?)ので質問させていただきます。 http://oshiete1.goo.ne.jp/qa1757174.html 《やりたい事》 Form1に配置したボタン1をクリックするとForm1を閉じてForm2を表示 Form2に配置したボタンAをクリックするとForm2を閉じてForm1を表示する。 これをやりたいのですが、なかなかうまく行きません。 ボタン1をクリックしてForm1を閉じないでForm2をShowかShowDialogでモードレス表示 ボタンAをクリックしてForm2をCloseさせてForm1を表示させる事(元々閉じていないので)は出来ます。 可能ならばどちらかを必ず閉じる方法でやりたいと思います。 可能でしょうか? 解決策やヒント、良いサイトがありましたら回答をお願いします。

  • VB6.0で、グラフを複数表示させたいのですが。

    VB6.0で、Form1にある描画ボタンを押すたびに、 Form2のグラフを画面上に追加表示したいのですが、 同じフォームを複数表示させる方法がわかりません。 ご存知の方教えてください。 よろしくお願いします。 Form2は添付ファイルのような感じです。 ピクチャーボックスにグラフを描画します。

このQ&Aのポイント
  • 水道料金が3700円の通知が届きました。これは高いのでしょうか?
  • 3700円の水道料金の通知がありますが、これは一般的な料金なのでしょうか?
  • 水道料金が3700円になるとの通知があります。同じくらいの料金の人はいますか?
回答を見る