您需要了解的背景: 我有两个表 - 一个名为“userprofiles”,一个名为“comments” - 在“comments”表中有一个名为“CommentUser”的查找字段,它链接到“userprofiles”中的一个字段称为“旅行者姓名”。
用户的头像图像路径(即 /Account/UserProfileAvatar/[TravellerName].jpg)可在名为“UserAvatar”的字段下的“userprofiles”表中找到。
gridview 本身使用带有 asp:Image 的 TemplateField,使用 Eval 和 Database 字段。我的意图是评论部分显示这 4 个数据字段:
- 用户头像
- 用户名('CommentUser')
- 标语
- 评论正文
我对第 2-4 点很好,但第 1 点是你们进来的地方。
客户端代码如下所示:
<%-- Comments Box --%> <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="CommentsDataSource" Height="167px" Width="325px"> <Columns> <asp:TemplateField HeaderText="Comments"> <ItemTemplate> <div style="background-color:Silver"> <div class="avatar-frame"> <asp:Image runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> </div> <h1><%# Eval("TagLine")%></h1> <h2><%# Eval("CommentUser")%></h2> <p><%# Eval("CommentBody")%></p> </div> </ItemTemplate> <AlternatingItemTemplate> <div style="background-color:White"> <div class="avatar-frame"> <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> </div> <h1><%# Eval("TagLine")%></h1> <h2><%# Eval("CommentUser")%></h2> <p><%# Eval("CommentBody")%></p> </div> </AlternatingItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="CommentsDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:BookMeetConnString %>" ProviderName="<%$ ConnectionStrings:BookMeetConnString.ProviderName %>" SelectCommand="SELECT comments.CommentUser, comments.TagLine, comments.CommentBody, comments.BookID, userprofiles.TravellerName, userprofiles.AvatarURL FROM userprofiles INNER JOIN comments ON userprofiles.[TravellerName] = comments.[CommentUser] WHERE ([BookID]= ?)"> <SelectParameters> <asp:QueryStringParameter Name="?" QueryStringField="ID" /> </SelectParameters> </asp:SqlDataSource> <%-- End of Comments Box --%>
正如你所看到的,我对查询做了一些散列(我有一个粗略的想法,我需要做一个 JOIN,但我对 SQL 中的 JOIN 一无所知)。
我的查询的逻辑结构如下:
- SELECT comments.CommentUser、comments.TagLine、comments.CommentBody (这些是评论表中需要的文本字段)
- 从“userprofiles”中检索每个发表评论的用户的 UserAvatar
- 仅显示该特定 bookid 的评论(SQL 查询的最后部分将是WHERE ([BookID] = ?)
我希望你明白我所设想的查询是什么?
编辑: “BookID”的数据类型是访问查找(通过查找向导创建)。所有表都是通过 Microsoft Access 创建的。就字段的实际数据类型而言,据我所知,Access 会自动将“数字”数据类型分配给所有查找。查找查询本身是从表“comments”中的“BookID”到“booklist”表中的“ID”。