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非常感谢。我在代码中漏掉了一个逻辑。现在它开始工作了。!