tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルフォームを共用したい
記事No4486
投稿日: 2006/10/31(Tue) 11:35
投稿者nori
こんにちは

VB2005ExpressEditionを使用しています。

データベースを操作するプログラムを作成しているのですが、
データの追加フォームと編集フォームを共用できないかと
考えています。

具体的には、DataGridViewを配置したForm1に、[追加]と[編集]ボタンが
あります。

[追加]ボタンを押すと、下記コマンドを実行し、「Form2」を表示します。
        Dim frm As New Form2
        frm.ShowDialog(Me)

Form2_Loadには、下記コマンドが記述してあり新規にデータ入力ができます。
        MainOrderBindingSource.AddNew()

これを、[編集]ボタンを押したときは、Form2を開き、DataGridViewで選択
しているデータをForm2に表示したいのですが、可能でしょうか?

[ツリー表示へ]
タイトルRe: フォームを共用したい
記事No4487
投稿日: 2006/10/31(Tue) 14:20
投稿者るしぇ
このサイトのサンプルから、
←[VB.NETTips一覧 他]
  [フォーム(34)]
   [Form2からForm1のテキストボックスの内容を読み書きする(プロパティ使用)]
あたりを参考に、自分で作成したプロパティ経由でデータを受け渡し
してみてください。

[ツリー表示へ]
タイトルRe: フォームを共用したい
記事No4488
投稿日: 2006/10/31(Tue) 14:23
投稿者魔界の仮面弁士
> これを、[編集]ボタンを押したときは、Form2を開き、DataGridViewで選択
> しているデータをForm2に表示したいのですが、可能でしょうか?
可能でしょう。

> frm.ShowDialog(Me)
あれ? DataGridView が持っているデータセットを Form2 に渡さなくて良いのですか?

> MainOrderBindingSource.AddNew()
AddNew するのではなく、現在行を調整するようにすれば OK かと。

[ツリー表示へ]
タイトルRe^2: フォームを共用したい
記事No4489
投稿日: 2006/11/01(Wed) 04:46
投稿者nori
> > frm.ShowDialog(Me)
> あれ? DataGridView が持っているデータセットを Form2 に渡さなくて良いのですか?
はい。その渡し方が分からないのです。

> > MainOrderBindingSource.AddNew()
> AddNew するのではなく、現在行を調整するようにすれば OK かと。
調整とはどのようなやり方なのか教えてください。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: フォームを共用したい
記事No4490
投稿日: 2006/11/01(Wed) 20:08
投稿者魔界の仮面弁士
> > > frm.ShowDialog(Me)
> > あれ? DataGridView が持っているデータセットを Form2 に渡さなくて良いのですか?

# 単行編集なら、データセットではなく、DataRow を渡すだけでよいかも。

> はい。その渡し方が分からないのです。

案1) Form2 の ShowDialog をオーバーロードして、
 DataSet/DataTable/DataRow のいずれかを引数として渡せるようにする。

案2) Form2 のコンストラクタに、DataSet/DataTable/DataRow のいずれかを引数として加える。

案3) Form2 側が、データが必要なとき(たとえば、Formのロード時)に、
 DataSet/DataTable/DataRow のいずれかを要求するイベントを公開する。

案4) Form2 に、DataSet/DataTable/DataRow のいずれかを受け取るプロパティを用意する。

などなど。


> > > MainOrderBindingSource.AddNew()
> > AddNew するのではなく、現在行を調整するようにすれば OK かと。
> 調整とはどのようなやり方なのか教えてください。

BindingSource での現在行は、Position プロパティで表されます。
また、その Position を得るために、Find メソッドを使う事ができます。

あるいは、BindingSource を使わないのであれば、型付DataTableの
'Find主キー' メソッドを使うという手もあります。
# DataTable.Select も使えるかな?

Find 系メソッドを使う以外の方法としては、目的の行を得るために、
全行ループして探すという手もあるかと思います。

[ツリー表示へ]