C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 異なるForm間でデータを共有するには?


(過去ログ 47 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■25244 / inTopicNo.1)  異なるForm間でデータを共有するには?
  
□投稿者/ まぐねしうむ (40回)-(2008/09/17(Wed) 10:45:27)

分類:[C#] 

VS2005 C#
DB Access2003(MDB)

会社情報・製品情報のDBがあったとして
Form1内のDataGridの特定の行をクリックすると
Form2を開き、選択された製品情報の詳細を開く様な物をつくりたいと
考えています。

それぞれ、Form1、Form2内に、データソースから
当該テーブルをドラッグしForm内だけであれば、DBからの情報を取得出来ているのですが
Form1で選択された製品情報をForm2で開く為の処理が分りません。
また、それぞれ会社情報、製品情報内の移動はbindingNavigatorを使用しています。
なので、Form1からForm2に移動した時は、bindingNavigator内で指定の位置に移動するようにしたいです。


こんなイメージです。
Form1(会社情報)
 ・会社ID
 ・会社名
 ・住所
 ・製品情報(DataGridViewで当該企業内の製品一覧を表示)
  =>行をダブルクリックするとForm2で詳細情報を開くようにしたい。

Form2(製品情報) Form1でダブルクリックされると、指定された製品情報を表示したい。
 ・ID
 ・会社ID
 ・製品番号
 ・単価
 ・その他の情報・・・・

よろしければ教えてください。
引用返信 編集キー/
■25245 / inTopicNo.2)  Re[1]: 異なるForm間でデータを共有するには?
□投稿者/ まぐねしうむ (41回)-(2008/09/17(Wed) 10:48:42)
申し訳ありません。
書き途中の物を送信してしまいました。

タイトルを記入していなかったので、申し訳ありませんが
ココに書かせていただきます。

異なるForm間でデータを共有するには?
引用返信 編集キー/
■25246 / inTopicNo.3)  Re[1]: 異なるForm間でデータを共有するには?
□投稿者/ επιστημη (1322回)-(2008/09/17(Wed) 10:50:02)
επιστημη さんの Web サイト
> Form1内のDataGridの特定の行をクリックすると
> Form2を開き、選択された製品情報の詳細を開く様な物をつくりたいと
> 考えています。

Form2のShowに先立って製品情報の詳細(あるいはそれを拾うためのキー)を
Form2に与えておけばいいんじゃないかと。

Form2 frm2 = new Form2();
frm2.SetData(表示に必要な情報); // こんなメソッドをForm2に追加
frm2.Show();

引用返信 編集キー/
■25257 / inTopicNo.4)  Re[2]: 異なるForm間でデータを共有するには?
□投稿者/ まぐねしうむ (42回)-(2008/09/17(Wed) 11:16:51)
ご返信有難うございます。

> Form2のShowに先立って製品情報の詳細(あるいはそれを拾うためのキー)を
> Form2に与えておけばいいんじゃないかと。
>
> Form2 frm2 = new Form2();
> frm2.SetData(表示に必要な情報); // こんなメソッドをForm2に追加
> frm2.Show();

と言うことは、この場合は Keyが製品IDになるので
例えば


Form2 frm2 = new Form2();
frm2.SetData(製品ID);
frm2.Show();

Form2内で製品IDをKeyにして、
Slecet文を発行するクエリを実行するイメージでしょうか?

でも、この方法だとデータ抽出を行っているので
bindingNavigator上では「製品ID」と一致するものしか表示されませんよね?

それとも、bindingNavigator上でFor等で「製品ID」と一致するデータまで
移動を行っていくのでしょうか?
申し訳ありませんが、もう少し詳しく教えて頂けないでしょうか?

よろしくお願いします。




引用返信 編集キー/
■25264 / inTopicNo.5)  Re[2]: 異なるForm間でデータを共有するには?
□投稿者/ επιστημη (1323回)-(2008/09/17(Wed) 11:29:01)
επιστημη さんの Web サイト
frm2.SetData(表示する, 項目を, 特定するため, いくつ, 引数を, 与えても, いいんじゃない?);


引用返信 編集キー/
■25332 / inTopicNo.6)  Re[3]: 異なるForm間でデータを共有するには?
□投稿者/ Tram (2回)-(2008/09/17(Wed) 18:53:05)
恥ずかしながらbindingNavigatorを初めて知ったのですが、
MSDNなどを調べつつ以下のように実装したら出来ました。
ご参考までに。

呼び出し元
Form2 frm2 = new Form2();
frm2.SetData(製品情報DataGridViewのDataSourceをセット); 
frm2.Show();

Form2のSetDataは以下のように実装します。
ここでは、label1〜3それぞれに、ID、会社ID、製品番号をバインドしています。
実際に合わせて書き換えてください。
public void SetData(object data)
{
    this.label1.DataBindings.Add(
        new Binding(
            "Text",
            data,
            "ID"));
    this.label2.DataBindings.Add(
        new Binding(
            "Text",
            data,
            "会社ID"));
    this.label3.DataBindings.Add(
        new Binding(
            "Text",
            data,
            "製品番号"));
}

引用返信 編集キー/
■25334 / inTopicNo.7)  Re[4]: 異なるForm間でデータを共有するには?
□投稿者/ Jitta on the way (178回)-(2008/09/17(Wed) 19:00:46)
No25332 (Tram さん) に返信
> 恥ずかしながらbindingNavigatorを初めて知ったのですが、
> MSDNなどを調べつつ以下のように実装したら出来ました。
> ご参考までに。
>
> 呼び出し元
> Form2 frm2 = new Form2();
> frm2.SetData(製品情報DataGridViewのDataSourceをセット);
> frm2.Show();
>
> Form2のSetDataは以下のように実装します。
> ここでは、label1〜3それぞれに、ID、会社ID、製品番号をバインドしています。
> 実際に合わせて書き換えてください。
> public void SetData(object data)
> {
> this.label1.DataBindings.Add(
> new Binding(
> "Text",
> data,
> "ID"));
> this.label2.DataBindings.Add(
> new Binding(
> "Text",
> data,
> "会社ID"));
> this.label3.DataBindings.Add(
> new Binding(
> "Text",
> data,
> "製品番号"));
> }


そうやるなら。

DataSet は Form から独立させてしまえばいいです。
データ用のフォームがあったのは、Delphi と C++ Builder だっけ?VS 2005 で出来たんじゃなかったっけ?
引用返信 編集キー/
■25352 / inTopicNo.8)  Re[5]: 異なるForm間でデータを共有するには?
□投稿者/ Tram (3回)-(2008/09/18(Thu) 00:34:39)
No25334 (Jitta on the way さん) に返信
> そうやるなら。
>
> DataSet は Form から独立させてしまえばいいです。
> データ用のフォームがあったのは、Delphi と C++ Builder だっけ?VS 2005 で出来たんじゃなかったっけ?

なるほど、私の例はεπιστημηさんが提示されていた
方法をベースに、具体的な実装方法を考えてみたのですが、
より美しい?やり方があるのですね。
データ用フォームなる物もまた恥ずかしながら知りませんでした(^^;
引用返信 編集キー/
■25366 / inTopicNo.9)  Re[5]: 異なるForm間でデータを共有するには?
□投稿者/ まぐねしうむ (43回)-(2008/09/18(Thu) 11:40:29)
返信ありがとうございます。
お二人が提示してくれた情報を元に作成してみました。

MainForm => frmCompany (会社情報)
=> frmProduct (製品情報)

MainForm上にDBアクセスに必要な
 DataSet,BindingSource,TableAdapterを配置して

public frmCompany(MainForm _mainForm)
public frmProduct(MainForm _mainForm) とし
 コンストラクタ内でTramさんの提示したDataBindings.Addを記述しました。

おかげさまで、期待通りの動きをしたのですが、
επιστημηがおっしゃっているデータ用のフォームと言うのは
今回当方の場合ですとMainForm上に各DBに関するOBJを配置しましたが
コレでも問題ないのでしょうか?

以上よろしくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -