2016-05-11 12 views
0

私はC#には新しく、wpfにはとても新しいので、これが本当にばかな質問であれば、私を許してください....別のクラスで作成されたデータテーブルにデータを保存しますか?

私は3つのクラスを持っています。ここに私のプログラムの構造があります。いくつかの初期化の手順が行われるべきであるメイン・ウィンドウクラスで

は、そのうちの一つは、データテーブルが別のクラスのメソッドを使用して作成されていることである。ここでは

public partial class MainWindow : Window 
{ 

     public MainWindow() 
     { 

      InitializeComponent(); 

      savelabels table = new savelabels(); 
      table.createlabeltable(); 
      //...some other stuff that works 
      } 
} 

たDataTableが作成されるべきクラス、充填され、オンデマンドで返さ:

public class savelabels 
     { 
      DataTable labelcoords = new DataTable(); 

      public void createlabeltable() 
      { 
       DataColumn column;    

       column = new DataColumn(); 
       column.DataType = System.Type.GetType("System.Double"); 
       column.ColumnName = "id"; 
       labelcoords.Columns.Add(column); 

      } 

      public void saveposition(double x) 
      { 
       DataRow row = labelcoords.NewRow(); 
       row["id"] = x; 

       labelcoords.Rows.Add(row); 

      } 

     public DataTable GetDataTable() 
     { 
      return labelcoords; 
     } 
} 

その後、私はデータテーブルを埋めなければならない方法がある中で、この第三のクラスがあります。

public class getdata 
    { 

     public void filltable() 
     { 
      double x = 123; 
      savelabels ctable = new savelabels(); 
      ctable.saveposition(x); 
     } 

} 

getdataクラスの他のメソッドでも、savepositionメソッドによってテーブルに書き込まれた値を使用したいと考えています。問題はlabelcoordsテーブルに "id"カラムがないので、saveposition(x)メソッドでも動作しないため、MainWindowクラスで作成されたテーブルにsavepositionメソッドでアクセスできないと思います。

+0

なぜ、fillableメソッドをsavelabelsクラスに移動しないのですか?取得データクラスは、savelabelsクラスへの参照を持たないため、同じDataTableインスタンスを共有しません。 – simon

答えて

0

別のクラスインスタンスからクラスインスタンスにアクセスしたい場合は、インスタンスをそのクラスインスタンスに渡す必要があります。 getdataのインスタンスを作成することはありません。リファクタリングすることはできません。しかし、それはYourgetdataInstance.filltable(savelabels mytable)のようなものになり、その中に新しいインスタンスのインスタンス化を落としてmytable.saveposition(x)を使用します。メソッドが明白な構造を期待しているので、私はコメントで示唆されたものと一緒に行く傾向があります。

しかし、別のクラスにfilltableを保存したい場合は、私が示したようなパラメータを指定できます。 getdataという実際のインスタンスが不要な場合は、staticクラスに変更して直接呼び出すことができます。

+0

Thx、最終的には、getdataクラスに移動するだけで解決しました。この場合、最も簡単で多分最も効率的な方法です。 – dunkleosteus

関連する問題