タイトル一覧   関連タグ: Win C#
タグ:Win C# タイトル:別のフォームのDataSetの値取得
1
1:  お名前:デニゴン 2004/06/08 14:52:04

一日に何回も申し訳ありません。
またまた、質問です。
現在、FormA(MainForm)にJetでアクセスをくっつけています。
それを別のFormBで使用したいと思っております。
FormAにおける各プロパティは、
DataSet:mainSet1
DataView:mainView
DataGrid:mainGrid
です。

それらを用い、FormBに書いたコードは…、
*********************************************************
// 画像表示用
        // 画像表示
        private void gazouHyouji()
        {
            MainForm frmMainDialog = new MainForm();
            int iPos = frmMainDialog.BindingContext[frmMainDialog.mainSet1,"メイン"].Position + 1;
            int iCnt = frmMainDialog.BindingContext[frmMainDialog.mainSet1,"メイン"].Count;
 
            // 画像表示設定
            //NO.1画像用
            string ma1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 2]).Substring(0,4);
            string mb1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 2]).Substring(5,2);
            string mc1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 2]).Substring(8,2);
            string md1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 3]).Substring(11,2);
            string mf1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 3]).Substring(14,2);
            string mg1 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos, 3]).Substring(17,2);
            string mgazou1 = ma1 + mb1 + mc1 + md1 + mf1 + mg1;

            //NO.2画像用
            string ma2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 2]).Substring(0,4);
            string mb2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 2]).Substring(5,2);
            string mc2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 2]).Substring(8,2);
            string md2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 3]).Substring(11,2);
            string mf2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 3]).Substring(14,2);
            string mg2 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1, 3]).Substring(17,2);
            string mgazou2 = ma2 + mb2 + mc2 + md2 + mf2 + mg2;

            //NO.3画像用
            string ma3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 2]).Substring(0,4);
            string mb3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 2]).Substring(5,2);
            string mc3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 2]).Substring(8,2);
            string md3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 3]).Substring(11,2);
            string mf3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 3]).Substring(14,2);
            string mg3 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2, 3]).Substring(17,2);
            string mgazou3 = ma3 + mb3 + mc3 + md3 + mf3 + mg3;

            //NO.4画像用
            string ma4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 2]).Substring(0,4);
            string mb4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 2]).Substring(5,2);
            string mc4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 2]).Substring(8,2);
            string md4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 3]).Substring(11,2);
            string mf4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 3]).Substring(14,2);
            string mg4 = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3, 3]).Substring(17,2);
            string mgazou4 = ma4 + mb4 + mc4 + md4 + mf4 + mg4;
            
            
            // No.1
            mg41.Image = Image.FromFile("D:\\Data\\"+ mgazou1 + ".BMP");
            timeMg41.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos,2]);
            ngMg41.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos,4]);
            
            // No.2
            mg42.Image = Image.FromFile("D:\\Data\\"+ mgazou2 + ".BMP");
            timeMg42.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1,2]);
            ngMg42.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 1,4]);

            // No.3
            mg43.Image = Image.FromFile("D:\\Data\\"+ mgazou3 + ".BMP");
            timeMg43.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2,2]);
            ngMg43.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 2,4]);

            // No.4
            mg44.Image = Image.FromFile("D:\\Data\\"+ mgazou4 + ".BMP");
            timeMg44.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3,2]);
            ngMg44.Text = Convert.ToString(frmMainDialog.mainGrid[frmMainDialog.iPos - 3,4]);
        }

        
        // 最過去
        private void btnLast_Click(object sender, System.EventArgs e)
        {
            MainForm frmMainDialog = new MainForm();
            this.BindingContext[frmMainDialog.mainSet1,"メイン"].Position = 0;
            gazouHyouji();
        
        }

        // ひとつ前
        private void btnPrevious_Click(object sender, System.EventArgs e)
        {
            MainForm frmMainDialog = new MainForm();
            this.BindingContext[frmMainDialog.mainSet1,"メイン"].Position -= 1;
            gazouHyouji();
        
        }

        // ひとつ先
        private void btnNext_Click(object sender, System.EventArgs e)
        {
            MainForm frmMainDialog = new MainForm();
            this.BindingContext[frmMainDialog.mainSet1,"メイン"].Position += 1 ;
            gazouHyouji();
        
        }

        // 最新
        private void btnFirst_Click(object sender, System.EventArgs e)
        {
            MainForm frmMainDialog = new MainForm();
            this.BindingContext[frmMainDialog.mainSet1,"メイン"].Position =
                this.BindingContext[frmMainDialog.mainSet1,"メイン"].Count - 1;
            gazouHyouji();
        
        
        }
***********************************************************
と、こうなっています。
目的は、これでデータベースから、4つのピクチャボックスに画像を取り出したいと思っています。
何かアドバイスをいただければ幸いです。
よろしくお願いします。

2:  お名前:デニゴン 2004/06/08 16:12:56

ごめんなさい。質問になって射ませんでした・・・。
これで実行すると、以下のようなエラーが出ます。
「'System.InvalidOperationException' のハンドルされていない例外が system.windows.forms.dll で発生しました。

追加情報 : DataTable に連結されていない DataGrid からデータを読み取ることができません。」
3:  お名前:えムナウ 2004/06/08 21:04:12

>MainForm frmMainDialog = new MainForm();
new してはまずいのではないでしょうか? 新しい実体が出来てそこには、DataSet:mainSet1/DataView:mainView/DataGrid:mainGrid の実体はないですよね。

FormB に Public FormA frmMainDialog ; として
FormA で FormB を作ったときに以下のようにセットして受け渡してはどうでしょう。
formb.frmMainDialog = this ;

4:  お名前:えムナウ 2004/06/09 0:41:31

>新しい実体が出来てそこには、DataSet:mainSet1/DataView:mainView/DataGrid:mainGrid の実体はないですよね。

InitializeComponent()で実体を作るからありそうですね。
でもFillはどこでやっているのでしょう?
DataGrid.SetDataBinding をコンストラクタの外でやってたらまずそうですね。
やはり new してはまずいのではないでしょうか?

5:  お名前:菊池 2004/06/09 14:05:43

んー、InitializeComponentは通常コンストラクタで呼ばれますので、new と InitializeComponentは同時に実行されますので、基本としては問題は其処ではないかと。


6:  お名前:えムナウ 2004/06/09 18:57:03

動作順序としては FormA(MainForm) に Main があって ボタンクリックで FormB をSHowDialogで呼び出す。
FormB の Load と ボタンクリックでgazouHyouji() を呼び出す。
の手順ではないかと思うんですが。

この場合 FormBの各所で FormA(MainForm)を New することにまず問題があるのではと思うわけです。

また、DataSet:mainSet1/DataView:mainView/DataGrid:mainGrid は FormA(MainForm) にあるとのことなので、 Fill や DataGrid.SetDataBinding をどこでやっているかも非常に気になります。

コネクションを FormAで張りっぱなしのまま 新しいコネクションを New で作っていることになります。 提示のあったプログラムですと、 もともとの FormA、btnxxxx_Clickの最初、gazouHyouji() の最初と 一時期は3つのコネクションを作ることになります。

7:  お名前:デニゴン 2004/06/10 14:08:37

たしかにそうですよね。なんかもう一度いろいろプログラムを見ていると、いろんなところでインスタンスを作っていました…。

せっかく、みなさんにいろいろお答えいただいたのに、今回ちょっと時間の関係で、別のフォームはやめにして、同じフォームにパネルで作りました。また時間あが有る時に、このあたりを見直してみようと思います。
8:  お名前:ルイヴィトン 小銭入れ スーパーコピー 2019/12/30 5:32:53

弊店では信用第一主義を徹底しており社員全員下記の方針のもとに頑張っています。
1.不適合品を入荷しない。
厳しく受け入れ検査を行い、お客様に満足いただける品質のいい物だけを入荷する。
2.不適合品を出荷しない。
出荷前に細部まで二重確認を行い、お客様からご注文頂いた商品を納期通り出荷する。
3.お客様からのクレームゼロ
お客様第一主義を徹底し、お客様からのお問い合わせ、苦情等に対して積極的かつ丁寧に対応いたします。
1
お名前
メッセージ
次回のために入力情報を記録