0

ProjectsOverallからなる関係がありProjectsます。ProjectOverallには多数が含まれProjects、 aProjectは 1 つの に正確に割り当てられProjectOverallます。
詳細ビューを持っているものはProjectOverallすべて表示したいですProjects。これにより、 my に2つのオプションが残りますWebControlling.xsd:

  1. アダプターの ID を参照するものProjectsOverallをすべて見つけるようにアダプターを構成します。Projects
  2. Project指定された を持つすべてのエントリを検索するようにアダプターを構成しますProjectOverallID


両方を試しProjectOverallてみたところ、次の問題のいずれかに遭遇しまし
た。これにより、エラーが発生します。IDProjectOverall

制約を有効にできませんでした。1 つ以上の行に、NULL 以外、一意、または外部キーの制約に違反する値が含まれています

参照:一般的なエラーを解決する方法強制的に DataSet に制約を強制しない
両方のオプションが機能しませんでした。

[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public WebControlling.ProjectsDataTable GetAllProjectsForID(Guid ProjectOverallID)
{
    WebControlling.ProjectsDataTable projects = new WebControlling.ProjectsDataTable();
    try
    {
        projects.Merge(Adapter.GetAllProjectsForID(ProjectOverallID));
    }
    catch (Exception e)
    {
        throw e;
    }
    return projects;
}

SQL(完全にやり過ぎですが、エントリが1つしか返されない場合に機能します):

SELECT   wc_Countries.Name AS CountryName, wc_OrganisationUnit.Name AS OEName, wc_Projects.ID AS ProjectID, wc_ProjectsOverall.ID AS ProjectOverallID, wc_Projects.Name AS ProjectName, 
                         wc_ProjectsOverall.ProjectName AS ProjectOverallName, wc_ProjectsOverall.*, wc_Countries.*, wc_OrganisationUnit.*, wc_Projects.*
FROM         wc_ProjectsOverall INNER JOIN
                         wc_Countries ON wc_ProjectsOverall.CountryID = wc_Countries.ID INNER JOIN
                         wc_OrganisationUnit ON wc_ProjectsOverall.OrganisationUnitID = wc_OrganisationUnit.ID INNER JOIN
                         wc_Projects ON wc_ProjectsOverall.ID = wc_Projects.ProjectOverallID AND wc_Countries.ID = wc_Projects.CountryID AND 
                         wc_OrganisationUnit.ID = wc_Projects.OrganisationUnitID
WHERE     (wc_ProjectsOverall.ID = @ProjectOverallID)

詳細ビュー:

<%-- Sub Project Data Source --%>
<asp:ObjectDataSource ID="ObjectDataSourceProjects" runat="server" 
                          OldValuesParameterFormatString="{0}" 
                          SelectMethod="GetAllProjectsForID" 
                          TypeName="ProjectsOverall" 
                          DataObjectTypeName="System.Guid">
    <SelectParameters>
        <asp:QueryStringParameter QueryStringField="ID" Name="ProjectOverallID" Type="Object" /> 
    </SelectParameters>
</asp:ObjectDataSource>

DataSourceのタイプをに切り替えるTypeName="Projectsと、ビューに存在する ID にアクセスする方法がわからないため、2 番目のオプションは機能しません。
ビューには のすべてのプロパティが表示され、すべてのProjects`ProjectOverallが表示されます。s

<ContentTemplate>                   
                    <%-- Displays all Sub-Projects  --%>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                        <ContentTemplate>
                            <asp:GridView ID="GridViewProjects" runat="server" AllowPaging="True" AllowSorting="True"
                                AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="ObjectDataSourceProjects" PageSize="5">
                                <Columns>
                                    No need to show all    
                                </Columns>
                                <EmptyDataTemplate>
                                    No project matched your filter criteria. <br />
                                    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="<%# Request.RawUrl %>">Return to the project overview.</asp:HyperLink>
                                </EmptyDataTemplate>
                            </asp:GridView>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </div>
            </ContentTemplate>

これらのことのいずれかを行うためのクリーンなソリューションはありますか?

4

0 に答える 0