具有ObjectDataSource的GridView中复杂类型的多个DataKeyName

具有ObjectDataSource的GridView中复杂类型的多个DataKeyName,gridview,data-binding,Gridview,Data Binding,我有一个列表数据源,其中每个记录包含两个对象。我想将datakeynames属性与两个对象的PKID绑定,例如 <asp:GridView DataKeyNames="obj1.pkId, obj2.pkId" ... /> 预期的DataKeyName是“test.testId,subject.subjectId”,这使得考试类对象是唯一的 我的ObjectDataSource将绑定到列表我也遇到了同样的问题。使用DeoWalk在上面的评论中描述的索引值不起作用 我找到了解决我问

我有一个
列表
数据源,其中每个记录包含两个对象。我想将datakeynames属性与两个对象的PKID绑定,例如

<asp:GridView DataKeyNames="obj1.pkId, obj2.pkId" ... />
预期的DataKeyName是“test.testId,subject.subjectId”,这使得考试类对象是唯一的


我的ObjectDataSource将绑定到
列表

我也遇到了同样的问题。使用DeoWalk在上面的评论中描述的索引值不起作用

我找到了解决我问题的办法

我选择在根对象级别实现一个属性来表示子对象的id

为了匹配上面的示例,代码如下所示:

    class Examination
    {
        public string name{get;set;}
        public TestClass test{get;set;}
        public Subject subject{get;set;}
        public int TestID { get { return test.testId; } }
        public int SubjectID { get { return subject.subjectId; } }
    }

    class TestClass 
    {
       public int testId{get;set;}
    }

    class Subject
    {
       public int subjectId{get;set;}
    }
然后,要在网格的标记中设置我的gridview上的数据键,
DataKeyNames=“name,TestID,SubjectID”我也有同样的问题。使用DeoWalk在上面的评论中描述的索引值不起作用

我找到了解决我问题的办法

我选择在根对象级别实现一个属性来表示子对象的id

为了匹配上面的示例,代码如下所示:

    class Examination
    {
        public string name{get;set;}
        public TestClass test{get;set;}
        public Subject subject{get;set;}
        public int TestID { get { return test.testId; } }
        public int SubjectID { get { return subject.subjectId; } }
    }

    class TestClass 
    {
       public int testId{get;set;}
    }

    class Subject
    {
       public int subjectId{get;set;}
    }
然后,要在网格的标记中设置我的gridview上的数据键, DataKeyNames=“name,TestID,SubjectID”