我有两个sql server数据库表,分别是Machine和Fault。机器表包含我网站上有关特定机器的所有信息。故障表存储与特定机器相关的所有机械故障,即一台机器可能有许多故障(一对多关系)。我有一个绑定到Machine对象的数据源。这意味着我在这个对象中有一个Faults集合。我使用Windows窗体控件BindingNavigator导航到我系统中的每台机器。我能够查看每台机器的信息。但是,我正在努力查看与DataGridView中所选机器相关的所有故障。如何在DataGridView中获取与机器相关的所有故障。在我的Machine类中,我有一个get属性,它返回给定MachineID的所有错误。因此,在我的Machine对象中,Faults属性返回一组错误,如下面的代码所示。请帮忙吗?
public override ICollection<Fault> Faults
{
get
{
//returning all faults associated with a given machine
using (var context = new AllEntities())
{
var faultsList = (from f in context.Faults
where f.MachineID == MachineID
select f).ToList<Fault>();
return faultsList; //return the list of faults
}
}
答案 0 :(得分:0)
诀窍是通过BindingSource
绑定主网格,然后将详细网格 DataSource 属性绑定到同一个绑定源。
这是一个完整的演示版:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Samples
{
public class Master
{
public string Name { get; set; }
public ICollection<Detail> Details { get; set; }
}
public class Detail
{
public string Name { get; set; }
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form = new Form();
var split = new SplitContainer { Dock = DockStyle.Fill, Parent = form, Orientation = Orientation.Horizontal };
var dgvMaster = new DataGridView { Dock = DockStyle.Fill, Parent = split.Panel1 };
var dgvDetail = new DataGridView { Dock = DockStyle.Fill, Parent = split.Panel2 };
var data = Enumerable.Range(1, 10).Select(p => new Master
{
Name = "P" + p,
Details = Enumerable.Range(1, 10).Select(c => new Detail
{
Name = "C" + p + "." + c,
}).ToList()
}).ToList();
var bsMaster = new BindingSource { DataSource = data };
dgvMaster.DataSource = bsMaster;
dgvDetail.DataBindings.Add("DataSource", bsMaster, "Details", true, DataSourceUpdateMode.Never);
Application.Run(form);
}
}
}
关键部分是:
var bsMaster = new BindingSource { DataSource = data };
dgvMaster.DataSource = bsMaster;
dgvDetail.DataBindings.Add("DataSource", bsMaster, "Details", true, DataSourceUpdateMode.Never);
将Master
替换为Machine
,Detail
替换为Fault
,&#34;详情&#34;使用&#34; Faults`,结果将是您的模型。