Как создать отношения мастер / детализация с Telerik и OData? - PullRequest
1 голос
/ 29 сентября 2011

У меня есть служба OData WCF ADO.NET, созданная с помощью Entity Framework с использованием протокола версии 2. Модель объекта выглядит следующим образом:

Entity model

Теперь я хочу использовать это, используя Telerik RadGrid . Вот разметка на данный момент:

<telerik:RadGrid ID="radGrid" runat="server" AutoGenerateColumns="false" Width="100%" Skin="Sitefinity">
    <ClientSettings>
        <DataBinding Location="http://aadev:8081/measuredata.svc">
            <DataService TableName="MeasureTopics"></DataService>
        </DataBinding>
    </ClientSettings>
    <MasterTableView DataKeyNames="MeasureTopicGuid" GroupLoadMode="Client" Name="MeasureTopics">
        <Columns>
            <telerik:GridBoundColumn DataField="TopicName" />
        </Columns>
        <DetailTables>
            <telerik:GridTableView DataKeyNames="MeasureGuid" runat="server">
                <ParentTableRelation>
                    <telerik:GridRelationFields DetailKeyField="TopicID" MasterKeyField="MeasureTopicGuid" />
                </ParentTableRelation>
                <Columns>
                    <telerik:GridBoundColumn DataField="MeasureKeyCode" />
                    <telerik:GridBoundColumn DataField="MeasureName" />
                </Columns>
            </telerik:GridTableView>
        </DetailTables>
    </MasterTableView>
</telerik:RadGrid>

Здесь показаны темы измерения и стрелка вправо для расширения в определения показателей, но нажатие на стрелку ничего не дает. По крайней мере, часть проблемы заключается в том, что ParentTableRelation не может работать, так как «TopicID» не существует на объекте. (Этого нет, потому что наличие «MeasureTopic» в качестве свойства навигации не позволяет EF разрешить ему существовать и в сущности в качестве скаляра.)

Что я хотел бы знать, так это то, что отношение приходит через канал OData в виде ссылки ...

<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/MeasureTopic" type="application/atom+xml;type=entry" title="MeasureTopic" href="MeasureDefinitions(guid'96df6072-a8e4-e011-890d-000c29ba97e5')/MeasureTopic" /> 
<category term="HealthMeasuresModel.MeasureDefinition" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> 
<content type="application/xml">
    <m:properties>
        <d:MeasureGuid m:type="Edm.Guid">96df6072-a8e4-e011-890d-000c29ba97e5</d:MeasureGuid> 
        <d:MeasureKeyCode>ABC-001</d:MeasureKeyCode> 
        <d:MeasureName>ABC Register</d:MeasureName> 
        <d:MeasureDescription>Test</d:MeasureDescription> 
    </m:properties>
</content>

... как мне настроить RadGrid для его понимания?

1 Ответ

1 голос
/ 03 октября 2011

Ваша разметка в основном правильная, вместо GroupLoadMode должно быть HierarchyLoadMode. Первый указывает на загрузку групп, второй - на иерархические таблицы подробностей.

Вам также понадобится некоторый javascript, точнее два клиентских события RadGrid - OnHierarchyExpanding и OnCommand. Подход продемонстрирован в этом блоге Telerik .

...