2

我正在使用 Winforms、C#、VS2010 和实体框架编写一个简单的第一个应用程序。基本上,我正在使用一个丰富的数据库,并且我已经设置了框架,足以成功地使用 Work Order 表的子集填充 DataGridView 控件。

现在,我想在表单 ("cbProjectID") 上放置一个组合框,其值为 ProjectID,DisplayValue 为 ProjectNbr。我只想将项目放在与 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 来获取我的子集......)

实体框架数据源

任何帮助和/或指导将不胜感激。


这是现在的代码......

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

您需要顶部的 tblProject,因为另一个仅用于单个 WorkOrder。但是,您需要使用至少拥有 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 回答