知っておくべき背景: 私は 2 つのテーブルを持っています - 1 つは「userprofiles」と呼ばれ、もう 1 つは「comments」と呼ばれます。 「TravellerName」と呼ばれます。
ユーザーのアバター画像のパス (/Account/UserProfileAvatar/[TravellerName].jpg) は、「userprofiles」テーブルの「UserAvatar」フィールドの下にあります。
グリッドビュー自体は、Eval を使用した asp:Image で TemplateField を使用し、次に 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' までです。