在现有 GridView 中显示来自另一个 table 的记录

Display records from another table in an existing GridView

这是我面临的问题的一个例子。我有一个table叫Issues,里面有初始记录信息。每条记录也有一个类别,有些记录有多个类别。

问题

ID | Name        | Comments        | Date     | SubmittedBy
1  | Server down | Need assistance | 6/1/2015 | John

问题类别

ID | Name
1  | Internal
2  | External
3  | Mobile
4  | Email

问题目录

QID | CID
1   | 1
1   | 3
1   | 4

我试图在一个 GridView 中显示所有这些内容,如下所示:

Name        | Categories              | Date     | By
Server down | Internal, Mobile, Email | 6/1/2015 | John

所以我想将类别名称放入gridview 的a 列中。我怎样才能做到这一点?这可以通过 SQL 查询来完成,还是我需要在后面的代码中的 RowDataBound 中执行此操作?

<asp:GridView runat="server" ID="issuesView" CssClass="table" OnRowDataBound="issuesView_RowDataBound"
    GridLines="None" EmptyDataText="No issues" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Date" DataFormatString="{0:M/d/yy}" HeaderText="Date" />
        <asp:BoundField DataField="SubmittedBy" HeaderText="By" />
    </Columns>
</asp:GridView>
SELECT 
  [ID],
  name,
  STUFF((
    SELECT ', ' + [Name]  
    FROM #IssuesCategories cats
    JOIN #IssuesCatList list on list.CID = cats.ID
    WHERE (list.QID = #Issues.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
  ,[date]
  ,SubmittedBy
FROM #Issues

感谢 this post 出色的 STUFF 表达式。