Linq-to-SQL主 - 详细信息DataGridViews中的自定义详细信息

时间:2010-06-14 08:02:15

标签: c# winforms linq-to-sql datagridview master-detail

寻找一种方法来创建Linq-to-SQL Master-Detail WinForms DataGridViews,其中Linq查询的Detail部分是自定义的。 可以做得很好:

DataClasses1DataContext db = new DataClasses1DataContext(".\\SQLExpress");
var myQuery = from o in db.Orders select o;
dataGridView1.DataSource = new BindingSource()
{
    DataSource = myQuery
};
dataGridView2.DataSource = new BindingSource()
{
    DataSource = dataGridView1.DataSource,
    DataMember = "OrderDetails"
};

但是我希望将细节部分置于我的精确控制之下,例如

var myQuery = from o in db.Orders join od in db.OrderDetails  
on o.ID equals od.OrderID into MyOwnSubQuery select o;

并将其用于第二个网格:

dataGridView2.DataSource = new BindingSource()
{
  DataSource = dataGridView1.DataSource,
  DataMember = "MyOwnSubQuery" // not working...
};

我想要它的真正原因有点复杂(我想让Detail部分实际上是一些非预先定义的连接),但我希望上面传达了这个想法。

我可以只将Detail部分作为普通子表从预定义的关系中出来,还是可以使用Detail部分做更复杂的事情?有没有人觉得这是有限的(如果第一个例子是我们能做的最好的)?谢谢!

1 个答案:

答案 0 :(得分:0)

在黑暗中拍摄:

public class MyDataSource
{
    DataClasses1DataContext db = new DataClasses1DataContext(".\\SQLExpress");

    public IQueryable<Order> AllOrders
    {
        get { return db.Orders; }
    }

    public IQueryable<OrderDetails> OrderDetails
    {
        get
        {
            // define your custom query here
        }
    }
}

MyDataSource dataSource = new MyDataSource();
dataGridView2.DataSource = new BindingSource()
{
    DataSource = dataSource.AllOrders;
    DataMember = dataSource.OrderDetails;
};