他のフォームC#からメソッドを呼び出す

データセットを使用してdataGridViewからデータベースにデータを保存しようとしています。

私のメインのフォームではForm1私はこの機能があります:

public void SaveToDB()
    {
        aSH_PROD_ORDERSTableAdapter.Update(aSH_ORDER_DBDataSet1);
    }

私がForm1でこれを呼び出すと、それはうまく働きます。

しかし私がこれをFrom2から呼んだとき

 public void Savestuff()
    {
        form1.SaveToDB();
    }

次のような例外が発生します。

オブジェクト参照がオブジェクトインスタンスに設定されていません。

私はそれぞれの形でこれを持っています:

 public partial class Form2 : Form
{
    Form1 form1;

 public partial class Form1 : Form
{
    DateTimePicker oDateTimePicker = new DateTimePicker();
    Form2 resultsForm;

私がやろうとしているのは、Form2のdataGridViewのデータをデータベースに保存することだけです。

そして、私はこれがそれをする最善の方法だろうと考えました。

何か案は?

0
aSH_PROD_ORDERSTableAdapter とは何ですか?
追加された 著者 HimBromBeere,
あなたのために働くならば、投票を受け入れてください...
追加された 著者 Pranay Rana,
おそらくどこにも form1 フィールドを入力していないでしょう。
追加された 著者 Zohar Peled,
しないでください。ビジネスロジックとデータロジックを別々のクラスに移動し、両方のフォームからそのクラスを呼び出すと、再利用できます。フォームコードにはGUIロジックのみを含める必要があります。データベースメソッドを実行するためだけに別のフォームを開いても意味がありません。
追加された 著者 ADyson,
フォームは単なるクラスであり、魔法のオブジェクトではありません。 Form2では、 form1 は開いているフォームのインスタンスではありません。開いているフォームのインスタンスを参照する必要があります。
追加された 著者 Crowcoder,
あなたはform1を何にも設定していません
追加された 著者 LordWilmore,
ちょっと待って、あなたはForm2の内部クラスとしてForm1を作成していますか?
追加された 著者 LordWilmore,
おそらく、 form2 form1 を呼び出すよりも、サービスクラスで直接 aSH_PROD_ORDERSTableAdapter を呼び出すほうがよいでしょう。
追加された 著者 zcui93,
@ZoharPeledあなたはそれが何を意味するのか説明できますか?私は新しいです。ありがとう。
追加された 著者 James Morrish,

4 答え

あなたは私があなたが保存するための方法で別のクラスを作ることをお勧めよりもデータを保存するための方法を使用したい場合

以下は一例です、あなたはこのようなものが必要です

public class DbCrud
{
   public bool SaveData(DateSet ds)
   {
     //create data adapter object with required connection information
    //and just call save here 
      sqlCnn.Open();
      sqlCmd = new SqlCommand(sql, sqlCnn);
      adapter.SelectCommand = sqlCmd;
      adapter.Update(ds);
   }
}

form1クラスに

private DbCrud dbCrud;
public form1()
{
 dbCrud =new DbCrud();
  dbCrud.SaveData(ds);
}

フォーム2クラス

private DbCrud dbCrud;
public form2()
{
 dbCrud =new DbCrud();
  dbCrud.SaveData(ds);
}
2
追加された

次にやってみる:

public static void SaveToDB()
    {
        aSH_PROD_ORDERSTableAdapter.Update(aSH_ORDER_DBDataSet1);
    }
1
追加された
aSH_PROD_ORDERSTableAdapter Form1 のインスタンスメンバーであるかどうかによって、これはまったくコンパイルされません。しかし、あなたの答えは aSH_PROD_ORDERSTableAdapter.Update も静的であると仮定しています。
追加された 著者 HimBromBeere,

この観点から、Form1の静的プロパティを試してみてください。

0
追加された

Form1のオブジェクトを作成するときにこれを試してください。

Form1 f1 = new Form1();

あなたはこの後例外を受けてはいけません。

0
追加された