如何在gridview中以逗号分隔显示相同的行值

时间:2017-12-01 10:16:03

标签: c# asp.net gridview

我有这样的表:

enter image description here

我希望在c#中使用如下表格数据显示gridview:

enter image description here

有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:0)

如果您有平面数据,则需要对数据进行一些转换,并创建另一个数据表或集合以与网格绑定。见下面的例子:

void Main()
{
//Let this Table
    List<SvrEnvApp> records = new List<SvrEnvApp>()
    {
        new SvrEnvApp(){
        Server = "server1",
        Env="FCT",
        App="A"
        },
        new SvrEnvApp(){
        Server = "server1",
        Env="UAT",
        App="B"
        },
        new SvrEnvApp(){
        Server = "server2",
        Env="FCT",
        App="A"
        },
        new SvrEnvApp(){
        Server = "server2",
        Env="UAT",
        App="B"
        }   
    };

    List<SvrEnvApp> result = records.GroupBy(o=> o.Server).Select(g=> new SvrEnvApp()
    {
        Server = g.Key,
        Env= String.Join(",",g.Select(r=> r.Env)),
        App= String.Join(",",g.Select(r=> r.App)),
    }).ToList();
    result.Dump();
}

public class SvrEnvApp
{
 public string Server{get;set;}
 public string Env{get;set;}
 public string App{get;set;}
}

结果:转换后的数据与网格绑定..
enter image description here

答案 1 :(得分:0)

假设您知道如何数据绑定gridview,您将使用下面的查询获取gridview数据。 StackoverflowTable3是我使用您的示例数据使用的表的名称,此查询将返回数据,如下面的屏幕截图所示。

SELECT t1.Server,
   STUFF(
        (
            SELECT ', '+t2.App
            FROM StackoverflowTable3 AS t2
            WHERE t1.Server = t2.Server
            FOR XML PATH('')
        ), 1, 2, '') AS [App],
   STUFF(
        (
            SELECT ', '+t2.Env
            FROM StackoverflowTable3 AS t2
            WHERE t1.Server = t2.Server
            FOR XML PATH('')
        ), 1, 2, '') AS [Env]
FROM StackoverflowTable3 AS t1
GROUP BY t1.Server;

上述查询返回的数据的屏幕截图

Data for gridview

如果要数据绑定到SqlDataSource,可以使用如下所示的gridview标记。

gridview的示例标记

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="ID" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" AllowPaging="True">
   <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
   <Columns>
      <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
      <asp:BoundField DataField="Server" HeaderText="Server" SortExpression="Server" />
      <asp:BoundField DataField="Env" HeaderText="Env" SortExpression="Env" />
      <asp:BoundField DataField="App" HeaderText="App" SortExpression="App" />
   </Columns>
   <EditRowStyle BackColor="#999999" />
   <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
   <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
   <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
   <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
   <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
   <SortedAscendingCellStyle BackColor="#E9E7E2" />
   <SortedAscendingHeaderStyle BackColor="#506C8C" />
   <SortedDescendingCellStyle BackColor="#FFFDF8" />
   <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:YourDatabaseConnectionString %>" SelectCommand="SELECT t1.Server, STUFF(( SELECT ', '+t2.App  FROM StackoverflowTable3 AS t2 WHERE t1.Server = t2.Server FOR XML PATH('')), 1, 2, '') AS [App],
   STUFF((SELECT ', '+t2.Env FROM StackoverflowTable3 AS t2 WHERE t1.Server = t2.Server FOR XML PATH('')), 1, 2, '') AS [Env] FROM StackoverflowTable3 AS t1 GROUP BY t1.Server"></asp:SqlDataSource>