2

Winforms、C#、VS2010、および Entity Framework を使用して、単純な最初のアプリを作成しています。基本的に、私はタップしている豊富な DB を持っており、すでにフレームワークをセットアップしており、DataGridView コントロールに Work Order テーブルのサブセットを設定するのに十分です。

ここで、値が ProjectID で DisplayValue が ProjectNbr であるフォーム ("cbProjectID") にコンボ ボックスを配置します。WorkOrders に関連するコンボ ボックス リストにプロジェクトを配置したいだけで、そのセット内の一意の ProjectID のみを配置します (プロジェクトには数十の作業命令がある場合があります...)。

LINQ を使用して、EF からリストを生成する必要があると想定しています。私はLINQでかなり新しいです、そして私はそれを理解していません...これまでの私のコードは次のとおりです...

using System;
using CPASEntityFramework;
using System.Data.Entity;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BrowseWorkOrders
{
    public partial class BrowseWOs : Form
    {
        public BrowseWOs()
        {
            InitializeComponent();
        }

        private void BrowseWOs_Load(object sender, EventArgs e)
        {
            var context = new CPASEntities();
            var query = context.tblWorkOrders.Where(c => c.ProjectID==8);
            tblWorkOrderBindingSource.DataSource = query.ToList();

        //  Now, I want to load up the Combo Box with all the projects in the Work Order Table

        }
    }
}

私は理解できる方法を見つけようとしてネットを調べてきましたが、失敗しています。おそらく誰かが私を助けることができます。これが私のデータソースです(私は tblProject を使用すべきではないと思いますが、代わりに tblWorkOrder 内で tblProject を使用してサブセットを取得します...)

Entity Framework データソース

ヘルプおよび/またはガイダンスをいただければ幸いです。


これが今のコードです...

namespace BrowseWorkOrders
{
    public partial class BrowseWOs : Form
    {
        public BrowseWOs()
        {
            InitializeComponent();
        }

        private void BrowseWOs_Load(object sender, EventArgs e)
        {
            // Following loads up all Projects into the cbProjectID Combo Box

            var context = new CPASEntities();
            var PrID = context.qryProjectIDNbrDescs.ToList();
            cbProjectID.DataSource = PrID;
            cbProjectID.ValueMember = "ID";
            cbProjectID.DisplayMember = "ProjectNbr";
        }

        private void cbProjectID_SelectedIndexChanged(object sender, EventArgs e)
        {
            var context = new CPASEntities();
            var query = context.tblWorkOrders.Where(c => c.ProjectID == (int)cbProjectID.SelectedValue).ToList();
            tblWorkOrderBindingSource.DataSource = query;
        }
    }
}
4

1 に答える 1

4

もう一方は 1 つの WorkOrder 専用であるため、一番上に tblProject が必要です。ただし、少なくとも WorkOrder を持っている人でリストをフィルタリングする必要があります。

var projects = context.tblProjects.Where(p => p.tblWorkOrders.Any()).ToArray();
cbProjectID.DataSource = projects;
cbProjectID.ValueMember = "ProjectID";
cbProjectID.DisplayMember = "ProjectNbr";
于 2012-09-12T14:17:51.497 に答える