繁体   English   中英

组合框和实体框架

[英]Combo Box and Entity Framework

我正在使用Winforms,C#,VS2010和Entity Framework编写一个简单的第一个应用程序。 基本上,我正在挖掘一个丰富的数据库,并且我已经建立了框架,足以成功地用工作订单表的一个子集填充DataGridView控件。

现在,我想在其值为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以获得我的子集...)

实体框架数据源

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


现在是代码...

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;
        }
    }
}

您需要顶部的tblProject,因为另一个仅用于单个WorkOrder。 但是,您需要使用至少具有WorkOrder的人员来过滤列表:

var projects = context.tblProjects.Where(p => p.tblWorkOrders.Any()).ToArray();
cbProjectID.DataSource = projects;
cbProjectID.ValueMember = "ProjectID";
cbProjectID.DisplayMember = "ProjectNbr";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM