2

私は Entity Framework を初めて使用し、ナビゲーション プロパティ (外部キー参照) をドロップダウン リストにバインドしようとしているときに問題が発生しました。EntityDataSource コントロールを使用してデータを取得する Telerik RadGrid コントロールがあります。モデルの説明は次のとおりです。

Applications: AppId, AppName, ServerId
Servers: ServerId, ServerName

Applicaitons.ServerId は、Servers.ServerId への外部キー参照です。RadGrid はアプリケーションを一覧表示し、ユーザーがアプリケーションを挿入/更新/削除できるようにします。サーバー名を編集モードでドロップダウンリストとして表示したいのですが、できません。. これが私のaspxコードです:

<telerik:RadGrid ID="gridApplications" runat="server" Skin="Sunset" 
    AllowAutomaticInserts="True" AllowAutomaticDeletes="True"
    AllowPaging="True" AllowAutomaticUpdates="True" 
    AutoGenerateColumns="False" OnItemCreated="gridApplications_ItemCreated" 
    DataSourceID="applicationsEntityDataSource" Width="50%" 
    OnItemInserted="gridApplications_ItemInserted" 
    OnItemUpdated="gridApplications_ItemUpdated" 
    OnItemDeleted="gridApplications_ItemDeleted" GridLines="None">
    <MasterTableView CommandItemDisplay="Top" AutoGenerateColumns="False" DataKeyNames="AppId" DataSourceID="applicationsEntityDataSource">
        <RowIndicatorColumn>
            <HeaderStyle Width="20px" />
        </RowIndicatorColumn>
        <ExpandCollapseColumn>
            <HeaderStyle Width="20px" />
        </ExpandCollapseColumn>
        <Columns>
            <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn" HeaderText="Edit" ItemStyle-Width="10%">
            </telerik:GridEditCommandColumn>
            <telerik:GridButtonColumn CommandName="Delete" Text="Delete" UniqueName="DeleteColumn" ConfirmText="Are you sure you want to delete this application?" ConfirmTitle="Confirm Delete" ConfirmDialogType="Classic" ItemStyle-Width="10%" HeaderText="Delete">
            </telerik:GridButtonColumn>
            <telerik:GridBoundColumn DataField="AppId" UniqueName="AppId" Visible="false" HeaderText="Application Id" ReadOnly="true">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="AppName" UniqueName="AppName" HeaderText="Application Name" MaxLength="30" ItemStyle-Width="40%">
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn DataField="ServerId" UniqueName="ServerId" HeaderText="Server Hosted" EditFormColumnIndex="1">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlServerHosted" runat="server" DataTextField="Servers.ServerName" DataValueField="ServerId" Width="40%">
                    </asp:DropDownList>
                </EditItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
        <EditFormSettings ColumnNumber="2" CaptionDataField="AppId" InsertCaption="Insert New Application" EditFormType="AutoGenerated">
            <EditColumn InsertText="Insert record" EditText="Edit application id #:" EditFormColumnIndex="0" UpdateText="Application updated" UniqueName="InsertCommandColumn1" CancelText="Cancel insert" ButtonType="ImageButton"></EditColumn>
            <FormTableItemStyle Wrap="false" />
            <FormTableStyle GridLines="Horizontal" CellPadding="2" CellSpacing="0" Height="110px" Width="110px" />
            <FormTableAlternatingItemStyle Wrap="false" />
            <FormStyle Width="100%" BackColor="#EEF2EA" />
            <FormTableButtonRowStyle HorizontalAlign="Right" />
        </EditFormSettings>
    </MasterTableView>
</telerik:RadGrid>
<asp:EntityDataSource ID="applicationsEntityDataSource" runat="server" 
    ConnectionString="name=AnalyticsEntities" EnableDelete="True" 
    EntityTypeFilter="Applications" EnableInsert="True" EnableUpdate="True" EntitySetName="Applications" 
    DefaultContainerName="AnalyticsEntities" Include="Servers">
</asp:EntityDataSource>

GridTemplateColumn を次のコードに置き換えた別のアプローチを試しました

<telerik:RadComboBox ID="RadComboBox1" DataSourceID="serversEntityDataSource" DataTextField="ServerName" DataValueField="ServerId" AppendDataBoundItems="true" runat="server" >
<Items>
    <telerik:RadComboBoxItem />
</Items>

次のように、別の EntityDataSource コントロールを使用します。

    <asp:EntityDataSource ID="serversEntityDataSource" runat="server" 
    ConnectionString="name=AnalyticsEntities" EnableDelete="True" 
    EntityTypeFilter="Servers" EnableInsert="True" EnableUpdate="True" EntitySetName="Servers" 
    DefaultContainerName="AnalyticsEntities">
</asp:EntityDataSource>

しかし、次のエラーが発生します。

Application cannot be inserted. Reason: Entities in 'AnalyticsEntities.Applications' participate in the 'FK_Servers_Applications' relationship. 0 related 'Servers' were found. 1 'Servers' is expected. 

私の質問は、どのようにナビゲーション プロパティをバインドし、値を DropDownList/RadComboBox コントロールにロードするのですか?

4

1 に答える 1

1

ドロップダウンリストをグリッドのデータソースではなく、その 2 番目のデータソースにバインドしていると思います (2 番目の例で行ったように)。次に、テンプレート内で <%# BIND("ServerId") %> 構文を使用して、ドロップダウン/コンボ ボックスにSelectedValueプロパティを設定します。

于 2010-05-28T21:51:32.440 に答える