2

您需要了解的背景: 我有两个表 - 一个名为“userprofiles”,一个名为“comments” - 在“comments”表中有一个名为“CommentUser”的查找字段,它链接到“userprofiles”中的一个字段称为“旅行者姓名”。

用户的头像图像路径(即 /Account/UserProfileAvatar/[TravellerName].jpg)可在名为“UserAvatar”的字段下的“userprofiles”表中找到。

gridview 本身使用带有 asp:Image 的 TemplateField,使用 Eval 和 Database 字段。我的意图是评论部分显示这 4 个数据字段:

  1. 用户头像
  2. 用户名('CommentUser')
  3. 标语
  4. 评论正文

我对第 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 一无所知)。

我的查询的逻辑结构如下:

  1. SELECT comments.CommentUser、comments.TagLine、comments.CommentBody (这些是评论表中需要的文本字段)
  2. 从“userprofiles”中检索每个发表评论的用户的 UserAvatar
  3. 仅显示该特定 bookid 的评论(SQL 查询的最后部分将是WHERE ([BookID] = ?)

我希望你明白我所设想的查询是什么?

编辑: “BookID”的数据类型是访问查找(通过查找向导创建)。所有表都是通过 Microsoft Access 创建的。就字段的实际数据类型而言,据我所知,Access 会自动将“数字”数据类型分配给所有查找。查找查询本身是从表“comments”中的“BookID”到“booklist”表中的“ID”。

4

1 回答 1

1

我不熟悉 ASP.Net 语法,但您实际提取的数据似乎有些混乱。

这是您的 SQL 查询:

  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] = ?)

然而,要获取头像 URL,您可以使用:

ImageUrl='<%# Eval("UserAvatar") %>

并不是:

ImageUrl='<%# Eval("AvatarURL") %>

那么,它是什么?UserAvatar还是AvatarURL

于 2013-04-01T00:52:12.223 回答