我正在使用 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;
}
}
}