DataGridView 控件中的动态列 (ASP.NET)

Dynamic columns in DataGridView control (ASP.NET)

我有一个列表,其中包含以下模板中的记录。


日期 |用户 |问题 |答案(选项)

其记录将类似于


2015 年 2 月 2 日 |哈利 |什么是..? | 5

2015 年 2 月 2 日 |哈利 |如何..? | 4

2015 年 2 月 3 日 |爱丽丝 |什么是..? | 3

2015 年 2 月 3 日 |爱丽丝 |如何..? | 1


我需要一个数据 Gridview 来显示以下模板中的记录。

日期 |用户 |什么是..? |怎么..?

2015 年 2 月 2 日 |哈利 | 5 | 4

2015 年 2 月 3 日 |爱丽丝 | 3 | 1


谁能帮帮我。有什么聪明的方法可以做到这一点吗? 提前致谢。

//从工具箱中取出一个dataGridView

       DataTable dt = new DataTable();
       dt.Columns.Add("date");
       dt.Columns.Add("name");
       dt.Columns.Add("info");
       dt.Columns.Add("id");

        for (Loop through your records)
        {
            dr = dt.NewRow();
            dr[0] = ....; // your code here
            dr[1] = ....;
            dr[2] = ....;
            dr[3] = ....;
            dt.Rows.Add(dr); // now put row in table 

        Form2 f2 = new Form2();
        f2.Show();
        f2.dataGridView1.DataSource = dt; 

不确定这是否是预期的答案,但它产生了预期的结果。

 List<Record> Records = new List<Record>();
            Records.Add(new Record { Answer = 5, Date = DateTime.Parse("02/02/2015"), User = "Harry", Question = "What is..?" });
            Records.Add(new Record { Answer = 4, Date = DateTime.Parse("02/02/2015"), User = "Harry", Question = "How is..?" });
            Records.Add(new Record { Answer = 3, Date = DateTime.Parse("02/03/2015"), User = "Alice", Question = "What is..?" });
            Records.Add(new Record { Answer = 1, Date = DateTime.Parse("02/03/2015"), User = "Alice", Question = "How is..?" });

        var Result = Records.GroupBy(r => new { r.Date, r.User })
            .Select(g => new
            {
                Date = g.Key.Date,
                User = g.Key.User,
                WhatIs = g.Where(i => i.Question == "What is..?")
                    .Where(i => i.User == g.Key.User).Select(i => i.Answer).First(),
                HowIs = g.Where(i => i.Question == "How is..?")
                    .Where(i => i.User == g.Key.User).Select(i => i.Answer).First()
            }).ToList();
        dataGridView1.DataSource = Result;