ProjectsOverall
からなる関係がありProjects
ます。ProjectOverall
には多数が含まれProjects
、 aProject
は 1 つの に正確に割り当てられProjectOverall
ます。
詳細ビューを持っているものはProjectOverall
すべて表示したいですProjects
。これにより、 my に2つのオプションが残りますWebControlling.xsd
:
- アダプターの ID を参照するもの
ProjectsOverall
をすべて見つけるようにアダプターを構成します。Projects
Project
指定された を持つすべてのエントリを検索するようにアダプターを構成しますProjectOverallID
。
両方を試しProjectOverall
てみたところ、次の問題のいずれかに遭遇しまし
た。これにより、エラーが発生します。ID
ProjectOverall
制約を有効にできませんでした。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>
これらのことのいずれかを行うためのクリーンなソリューションはありますか?