0

私はエンティティフレームワークでエクストラグリッドを使用しています。2つのSQLテーブルがあります。gridControl1にpartnersテーブルを表示し、gridControl2にpartner_contactsテーブルを表示します。gridControl1とgridControl2をどのように関連付けることができますか。gridControl1の行をクリックすると、gridControl2の関連する行が表示されます。

1番目のテーブル:partners-partnerId-partnerName

2番目のテーブル: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つのエラーがありました:

  • デリゲート型ではないため、ラムダ式を型'string'に変換できません

  • タイプ'string'を'int'に暗黙的に変換することはできません

  • デリゲート'System.Func'は1つの引数を取りません

このコードの場合:(p => p.partnerId = obj2)

4

1 に答える 1

0

FocusedRowChangedgridcontrol1 でイベントを使用できます。

たとえば、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 に答える