5

Linq.Tables (dc.GTMD_Financials) から UserControl にデータを追加するコードを少し作成しました。データベース内のすべてのエントリに対して、新しいユーザー コントロールが表示されます。

しかし、このコードをメソッドで使用して、アプリケーション全体で再利用したいと考えています。私の問題は、メソッドを呼び出すたびに、データベースから別のテーブルを使用したいということです (したがって、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;
        }
        ); 

ご不明な点がございましたら、お知らせください。助けてくれてありがとう。

編集:

私はすでに得た助けを借りてそれを機能させることができないようです。私はすでに得た返信の助けを借りて、メソッドを少し編集することができました:

    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(Table< GTMD_Financial > dbTable? では、GTMD_Finacial が変更されます。

4

2 に答える 2

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()
    )
);
于 2013-07-18T11:15:34.737 に答える
2

うまくいけば、私はそれを正しく理解しました

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;
    }
    );
于 2013-07-18T11:09:56.230 に答える