我正在尝试创建照片库页面。 此页面将显示许多组(网球,高尔夫等)。每个组都可以拥有多个照片集,每个集合都可以有多个图像。
我正在使用嵌套转发器,首先显示组名,然后是照片集名称,然后是图像。
如果我在一个集合中有一个图像,我的代码工作正常。但是当我在集合中添加第二个图像时,我在下面发布的C#中出现了以下错误:
子查询返回的值超过1。子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时不允许这样做
此查询的目的是检索连接到该照片集的所有图像。
我需要进行哪些更改才能显示每个集合的所有图像,而不仅仅是一个?
<div class="panel-heading">
<h4 class="panel-title"><%# Eval("Group_Name") %></h4>
</div>
<div class="panel-body">
<asp:Repeater ID="repPhotoAlbums" runat="server" OnItemDataBound="repPhotoAlbums_ItemDataBound">
<ItemTemplate>
<div class="col-lg-12">
<h5><%# Eval("Name") %></h5>
<asp:Repeater ID="repPhotos" runat="server">
<ItemTemplate>
<a id="imageLink" href='<%# Eval("filename","../Images/{0}") %>' title='<%#Eval("imageDesc") %>' rel="lightbox[Brussels]">
<asp:Image ID="Image1" ImageUrl='<%# Bind("filename", "../Images/{0}") %>' runat="server" Width="112" Height="84" />
</a>
</ItemTemplate>
</asp:Repeater>
</div>
<!--col-lg-12-->
</ItemTemplate>
</asp:Repeater>
</div>
<!--panel-body-->
C#:
protected void repPhotoAlbums_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater repPhotos = (Repeater)(e.Item.FindControl("repPhotos"));
string Group_Id = DataBinder.Eval(e.Item.DataItem, "p_Collection_Id").ToString();
//Need to assign the Data in datatable
SqlDataAdapter sda = new SqlDataAdapter("SELECT Id, filename, imageDesc FROM Group_Images WHERE ID = (Select g_Image_Id = Group_Image_Id FROM Photo_Collection_Images WHERE Photo_Collection_Id = '" + Group_Id + "');", con);
DataTable dt = new DataTable();
sda.Fill(dt);
repPhotos.DataSource = dt;
repPhotos.DataBind();
}
}
另外,如果有帮助,我可以发布存储此数据的SQL表。 非常感谢能帮助我的人。
答案 0 :(得分:2)
使用exists()
:
select
Id
, filename
, imageDesc
from Group_Images as g
where exists (
select 1
from Photo_Collection_Images as i
where g.Id = i.Group_Image_Id
and i.Photo_Collection_Id = '" + Group_Id + "'
)
注意:对于实际使用,此类代码需要使用参数来阻止sql injection。
答案 1 :(得分:1)
使用reloadGrid
。另外,使用参数化语句而不是字符串连接:
IN
或使用加入:
select Id,
filename,
imageDesc
from Group_Images
where ID in (
select Group_Image_Id
from Photo_Collection_Images
where Photo_Collection_Id = @Group_id
)