0

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

第一个表:合作伙伴 - partnerId - 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;

我有两个错误:

  • 无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型

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

  • 委托“System.Func”不接受 1 个参数

对于此代码:(p => p.partnerId = obj2)

4

1 回答 1

0

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

例如,当 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;

我假设关系名称...它可能因您的模型而异。

于 2012-08-23T09:33:03.827 回答