XtraGrid Master-Detail在单独的网格中

时间:2012-08-23 08:57:42

标签: c# entity-framework

我在实体框架中使用xtragrids。我有2个sql表。我在gridControl1中显示了partners表,在gridControl2中显示了partner_contacts表。如何在gridControl1和gridControl2之间建立关系。如果我单击gridControl1中的一行,我想在gridControl2中显示相关的行。

第一桌:合作伙伴 - 合作伙伴ID - partnerName

第二张表:partner_contacts - partner_contactsId - partner_contactsName - partner_contacts_partner_FK

public partial class frmPartnersList : DevExpress.XtraEditors.XtraForm
{
    ValinorEntities valinor = new ValinorEntities();

    public frmPartnersList()
    {
        InitializeComponent();

        gridControl1.DataSource = valinor.partners;
        gridControl2.DataSource = valinor.partner_contacts;
    }
 }

我试过了:

        object obj = gridView1.GetRowCellValue(gridView1.GetSelectedRows()[0], gridView1.FocusedColumn.FieldName);

        string obj2 = obj.ToString();

        var selectedPartner = valinor.partners.Where(p => p.partnerId = obj2).FirstOrDefault();
        if (selectedPartner != null)
            gridControl2.DataSource = selectedPartner.partner_contacts;

我有2个错误:

  • 无法将lambda表达式转换为'string'类型,因为它不是委托类型

  • 无法将类型'string'隐式转换为'int'

  • 委托'System.Func'不带1个参数

代码:(p => p.partnerId = obj2)

1 个答案:

答案 0 :(得分:0)

您可以在gridcontrol1中使用FocusedRowChanged事件。

例如,当gridcontrol1

中的焦点行发生变化时
int partnerId=(int)gridview1.GetFocusedRowCellValue("PartnerID");

gridcontrol2.DataSource=valinor.partner_contacts.where(partner_contact=>partner_contact.PartnerId=partnerId);

或者如果您在实体模型中的合作伙伴实体中添加了关系,那么

var selectedPartner=valinor.partners.where(p=>p.PartnerId=partnerId).FirstOrDefault();
if(selectedPartner!=null)
gridcontrol2.datasource=selectedPartner.Contacts;

我假设关系名称......您的模型可能会有所不同。