【问题标题】:Show multiple rows in already defined columns of gridview在已定义的 gridview 列中显示多行
【发布时间】:2019-11-08 08:17:42
【问题描述】:

我有以下网格视图:

<asp:GridView ID="gvTimeline" ShowHeader="true"  runat="server" ShowHeaderWhenEmpty="true" AutoGenerateColumns="false" >
<Columns>
         <asp:BoundField DataField="8" ItemStyle-Width="25%" DataFormatString="{0:dd-MM-yyyy}" />
         <asp:BoundField DataField="2" ItemStyle-Width="25%" DataFormatString="{0:dd-MM-yyyy}" />
         <asp:BoundField DataField="6" ItemStyle-Width="25%" DataFormatString="{0:dd-MM-yyyy}" />
         <asp:BoundField DataField="4" ItemStyle-Width="25%" DataFormatString="{0:dd-MM-yyyy}" />
</Columns>
</asp:GridView>

还有下面的sql表:

Id   |  type  |  date

2    |    8   |  22/09/1997   
1    |    6   |  22/09/1998   
3    |    4   |  22/09/1999

我想要的是运行 sql 行并用与类型对应的日期填充每一列(只有 1 行)。每个数据字段都是一种类型。最好的方法是什么,以后可以正常访问每个 id?

我预料到了:

8                 2                 6              4
22/09/1997      null          22/09/1998       22/09/1999

【问题讨论】:

  • 您似乎正试图从现有表的 中派生一个新表,并绑定到 that 表的列,对吗?
  • 是的,或多或少。我只想要行。
  • 您应该研究 PIVOT 或条件聚合。

标签: asp.net sql-server vb.net


【解决方案1】:

如果您仅限于这些值,那么创建一个简单的视图并绑定到 it 可能是最简单的方法。例如:

CREATE VIEW view_for_gridview_binding AS
  SELECT DISTINCT
    eight.[date] as '8'
    , two.[date] as '2'
    , six.[date] as '6'
    , four.[date] as '4'
  FROM table_for_gridview_question 
  LEFT JOIN table_for_gridview_question AS eight ON (eight.[type] = 8)
  LEFT JOIN table_for_gridview_question AS two ON (two.[type] = 2)
  LEFT JOIN table_for_gridview_question AS six ON (six.[type] = 6)
  LEFT JOIN table_for_gridview_question AS four ON (four.[type] = 4)
GO

这里是测试:

CREATE TABLE table_for_gridview_question (
    Id int NOT NULL,
    [type] int NOT NULL,
    [date] date NOT NULL
)
GO

INSERT INTO table_for_gridview_question
SELECT 2, 8, '1997-09-22'
UNION
SELECT 1, 6, '1998-09-22'
UNION
SELECT 3, 4, '1999-09-22'
GO

CREATE VIEW view_for_gridview_binding AS
    SELECT DISTINCT
        eight.[date] as '8'
        , two.[date] as '2'
        , six.[date] as '6'
        , four.[date] as '4'
    FROM table_for_gridview_question 
    LEFT JOIN table_for_gridview_question AS eight ON (eight.[type] = 8)
    LEFT JOIN table_for_gridview_question AS two ON (two.[type] = 2)
    LEFT JOIN table_for_gridview_question AS six ON (six.[type] = 6)
    LEFT JOIN table_for_gridview_question AS four ON (four.[type] = 4)
GO

SELECT * FROM view_for_gridview_binding

DROP VIEW view_for_gridview_binding
DROP TABLE table_for_gridview_question

SELECT的结果:

8          2          6          4
---------- ---------- ---------- ----------
1997-09-22 NULL       1998-09-22 1999-09-22

但是,如果您的 types 可以是任何东西,您可能需要考虑阅读 PIVOTUNPIVOT,就像答案的 Dynamic Pivot Version 部分中描述的那样here.

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多