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

C# DataGridView控件(ASP.NET)中的动态列,c#,linq,datagridview,dynamic-controls,C#,Linq,Datagridview,Dynamic Controls,我有一个列表,其中包含以下模板中的记录 日期|用户|问题|答案(选项) 这些记录将是什么样的 2015年2月2日|哈里|什么是……?|五, 2015年2月2日|哈里|如何四, 2015年3月2日|爱丽丝|什么是..?|三, 2015年3月2日|爱丽丝|怎么做?|一, 我需要一个数据网格视图来显示以下模板中的记录 日期|用户|什么是..?|如何……? 2015年2月2日|哈里| 5 | 4 2015年3月2日|爱丽丝| 3 | 1 有人能帮我吗。有什么聪明的方法可以做到这一点吗? 提前感谢

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


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

这些记录将是什么样的


2015年2月2日|哈里|什么是……?|五,

2015年2月2日|哈里|如何四,

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

2015年3月2日|爱丽丝|怎么做?|一,


我需要一个数据网格视图来显示以下模板中的记录

日期|用户|什么是..?|如何……?

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

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


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

//从工具箱和

       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;
List记录=新列表();
添加(新记录{Answer=5,Date=DateTime.Parse(“02/02/2015”),User=“Harry”,Question=“What is..?”);
添加(新记录{Answer=4,Date=DateTime.Parse(“02/02/2015”),User=“Harry”,Question=“你好吗?”);
添加(新记录{Answer=3,Date=DateTime.Parse(“02/03/2015”),User=“Alice”,Question=“What is…”);
添加(新记录{Answer=1,Date=DateTime.Parse(“02/03/2015”),User=“Alice”,Question=“你好吗?”);
var Result=Records.GroupBy(r=>new{r.Date,r.User})
.选择(g=>new
{
日期=g.Key.Date,
User=g.Key.User,
WhatIs=g.Where(i=>i.Question==“什么是…”)
.Where(i=>i.User==g.Key.User)。选择(i=>i.Answer).First(),
HowIs=g.Where(i=>i.Question==“HowIs…”)
.Where(i=>i.User==g.Key.User).选择(i=>i.Answer).First()
}).ToList();
dataGridView1.DataSource=结果;

谢谢您的时间,哈希姆。我想要的是,像我上面提到的那样,通过组合问题和答案,在一行中有一个单用户记录。好主意。但逻辑有点偏离。如何在不考虑数据字段的情况下映射gridView?我不确定“不考虑数据字段”是什么意思,但使用下面的示例,datagridview将自己映射到创建的匿名类型的字段。因此,您所要考虑的就是构建所需的类型并将其绑定到datagridview。但是我觉得你有一个问题我没有真正理解:)我只想有一个唯一的行,类似于用户、日期、问题以及答案。好的,上面的代码就是这样做的:它给出的结果与你在问题中写的结果相同。也就是说,2行,1行代表用户Harry,1行代表用户Alice,第3列为“WhatIs”,第4列为“Howis”。Marc非常感谢。我在代码中漏掉了一个逻辑。现在它开始工作了。!