2013-07-18 10 views
7

Linq.Tables(dc.GTMD_Financials)のデータをUserControlに追加するコードを少し作成しました。データベース内のすべてのエントリに対して、新しいusercontrolが表示されます。メソッド内の複数のLinq.Tables

しかし、このコードをアプリケーション全体で再利用する方法で使用したいと思います。私の問題は、私がメソッドを呼び出すたびにデータベースから別のテーブルを使用したいので(GTMD_Financialsが変わるので)

私はそれを理解することはできないと思います。

 int locationControl = 78; 
     DataClasses1DataContext dc = new DataClasses1DataContext(); 

     dc.GTMD_Financials.ToList().ForEach(x => 
     { 
      KPIEntrys uc = new KPIEntrys();   // UserControl 

      uc.KPI = x.KPI;       // Add data to properties 
      uc.Status = x.Status.ToString(); 
      uc.Goal = x.Goal.ToString(); 
      uc.Currently = x.Currently.ToString(); 
      bool checkaction = x.ShowAction == true ? uc.ShowAction = true : uc.ShowAction = false; 
      bool checkstats = x.ShowStats == true ? uc.ShowStats = true : uc.ShowStats = false; 
      bool checkstatus = x.Status < x.StatusSignal ? uc.StatusGood = true : uc.StatusGood = false; 

      uc.Location = new Point(21, locationControl); 
      this.Controls.Add(uc);     // Add Control to Form 

      locationControl = locationControl + 34; 
     } 
     ); 

何か不明な点がありましたらお知らせください。 ご協力いただきありがとうございます。

編集:私はそれは私がすでに持って助けを借りて作業し得るように見えることはできません

。私は私がすでに持っreplysからの助けを借りて方法を少し編集することができました:

int locationControl = 78; 
    DataClasses1DataContext dc = new DataClasses1DataContext(); 

    public List<Control> LoadKPIs(Table<GTMD_Financial> dbTable) 
    { 
     var controls = new List<Control>();    

     dbTable.ToList().ForEach(x => 
     { 
      KPIEntrys uc = new KPIEntrys(); 

      uc.KPI = x.KPI; 
      uc.Status = x.Status.ToString(); 
      uc.Goal = x.Goal.ToString(); 
      uc.Currently = x.Currently.ToString(); 
      uc.ShowAction = (bool)x.ShowAction; 
      uc.ShowStats = (bool)x.ShowStats; 
      uc.StatusGood = x.Status < x.StatusSignal; 
      uc.Location = new Point(21, locationControl); 

      controls.Add(uc); 

      locationControl = locationControl + 34; 
     } 
     ); 
     return controls; 
    } 

だから私は私の質問を言い換えるてみましょう:私は、メソッドを呼び出したときにどのように私は、クラスを変更することができますLoadKPIs(表< GTMD_Financial> DBTABLE?だから、GTMD_Finacial変更。

+0

?あなたが再利用できる作品と再利用できない作品があります。再利用可能なメソッドを作成する場合は、そのことについて非常に明確にする必要があります。それは実際に何をしていますか? – Maarten

+0

"dc.GTMD_Financials"だけが変更されます。次回は、 "dc.GTMD_Organisation"(または別のもの)を使用したいと思っています – Marcel

+0

あなたが必要とするのは、dc.GTMD_Financialsの代わりにこのメソッドに現在必要なテーブルを取得することだけです。 –

答えて

4

使用したいすべてのプロパティを定義するインターフェイスを書き、ビジネスエンティティにそれを実装しましたあなたが使いたいものです。

public interface IMyReusableInterface { 
    string KPI { get; set; } 
    string Status { get; set; } 
    // etc... 
} 

public partial GTMD_Financials: IMyReusableInterface { 
} 

このインターフェースを実装するオブジェクトのリストを受け入れる再利用可能なメソッドを書くことができます。

public List<Control> MyReusableMethod (List<IMyReusableInterface> data) { 
    int locationControl = 78; 
    var controls = new List<Control>(); 

    foreach (var x in data) { 
     KPIEntrys uc = new KPIEntrys();   // UserControl 

     uc.KPI = x.KPI;       // Add data to properties 
     uc.Status = x.Status.ToString(); 
     uc.Goal = x.Goal.ToString(); 
     uc.Currently = x.Currently.ToString(); 
     // I've simplefied the boolean checks. 
     uc.ShowAction = x.ShowAction; 
     uc.ShowStats = x.ShowStats; 
     uc.StatusGood = x.Status < x.StatusSignal; 
     uc.Location = new Point(21, locationControl); 

     controls.Add(uc);     // Add Control to Form 

     locationControl = locationControl + 34; 
    } 

    return controls; 
} 

そして、それを使用します。コードの断片は、あなたが再利用したい

DataClasses1DataContext dc = new DataClasses1DataContext(); 
this.Controls.AddRange(
    MyReusableMethod(
     dc.GTMD_Financials 
      .Cast<IMyReusableInterface>() 
      .ToList() 
    ) 
); 
+0

あなたの入力のためのThnxしかし、私はそれを動作させるように見えることはできません..おそらく私の代わりに障害。 "パブリックパーシャルGTMD_Financials:IMyReusableInterface { }"を作成できないようで、次に "コントロール"を使用しようとするとエラーが表示されますが見つかりません。 – Marcel

+0

コントロールはControl.ControlCollectionでなければなりません。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.aspxを参照してください。私はそれを修正します。 – Maarten

+0

そして、メソッドで使用するクラスにIMyReusableInterfaceインターフェイスを実装する必要があります。 – Maarten

4

がうまくいけば、私はそれが正しい

public void myMethod(List<TSource> y) 
int locationControl = 78; 
    y.ForEach(x => 
    { 
     KPIEntrys uc = new KPIEntrys();   // UserControl 

     uc.KPI = x.KPI;       // Add data to properties 
     uc.Status = x.Status.ToString(); 
     uc.Goal = x.Goal.ToString(); 
     uc.Currently = x.Currently.ToString(); 
     bool checkaction = x.ShowAction == true ? uc.ShowAction = true : uc.ShowAction = false; 
     bool checkstats = x.ShowStats == true ? uc.ShowStats = true : uc.ShowStats = false; 
     bool checkstatus = x.Status < x.StatusSignal ? uc.StatusGood = true : uc.StatusGood = false; 

     uc.Location = new Point(21, locationControl); 
     this.Controls.Add(uc);     // Add Control to Form 

     locationControl = locationControl + 34; 
    } 
    ); 
+0

いいですが、どうすればLinq.Tableをとして使用しますか?私の限られた知識のために申し訳ありません。 – Marcel

+0

それは大丈夫です、私はそれがどのように低下​​したのか知っています、実際にはあなたはTSourceを使用しません。あなたが作成したタイプを使用し、そのタイプが必要なすべてのプロパティを持っていることを知ってください。それは抽象的なタイプ、またはインターフェイスもすることができます –

+0

最後のコメントであなたをマークするのを忘れて、@マーセル –

関連する問題