【问题标题】:how to display same rows values in comma separated in gridview如何在gridview中以逗号分隔显示相同的行值
【发布时间】:2017-12-01 18:53:08
【问题描述】:

我有这样的桌子:

我想在 c# 中使用该表数据显示 gridview,如下所示:

谁能告诉我怎么做?

【问题讨论】:

  • 你知道如何对gridview 进行数据绑定,甚至这是个问题吗?如果是,那我可以提供解决方案。

标签: c# asp.net gridview


【解决方案1】:

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

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;}
}

结果:转换后的数据与网格绑定..

【讨论】:

    【解决方案2】:

    假设您知道如何对 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;
    

    以上查询返回的数据截图

    如果您要将数据绑定到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>
    

    【讨论】:

    • 感谢您的评论。但我使用 MS 访问作为数据库并得到语法错误。
    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 2013-01-26
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2013-05-31
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多