2012-03-06 102 views
3

我有一个vb.net的网站,目前拥有考题每一行中垂直显示这样一个GridView:动态填充列标题在GridView

Name question answer 
----------------------- 
Joe question1 answer1 
Joe question2 answer2 
Joe question3 answer3 
Jill question1 answer1 
Jill question2 answer2 
Jill question3 answer3 

但我想改变它,从而使每个问题是一个标题,如下所示:

Name question1 question2 question3 
---------------------------------- 
Joe answer1 answer2 answer3 
Jill answer1 answer2 answer3 

这使得它更具可读性,因为每个用户只列出一次。

我已经花了上午搜索解决方案的更好的一部分,但真的找不到任何工作。

我想坚持一个gridview而不是重写我所有的代码。

有没有人有什么建议?

我实际上通过一些其他程序员类将我的数据绑定到gridview。我使用LINQ这样的:

Return (From entry In report.FetchAllEntries() 
       Select questionID = entry.Question.QuestionID, 
       userID = entry.Session.User.ID, 
       firstName = entry.Session.User.FirstName, 
       lastName = entry.Session.User.LastName, 
       QuestionText = entry.Question.Stem, 
       UserResponse = entry.Response.Text, 
       FreeResponse = entry.ResponseText, 
       SessionDate = entry.Timestamp 
       Where SessionDate.HasValue AndAlso 
           SessionDate.Value >= dateField1 AndAlso 
           SessionDate.Value <= dateField2 
       Order By lastName, SessionDate, questionID 

感谢

+1

它看起来像你可能可以通过修改你的SQL查询(就像做一个'PIVOT'或其他)。你可以显示为你的'GridView'生成数据的查询吗? – jadarnel27 2012-03-06 15:34:01

+0

我通过LINQ语句绑定。我不确定我是否可以修改LINQ语句来切换它......我编辑了我的原始文章以包含LINQ。 - 谢谢 – SkyeBoniwell 2012-03-06 15:41:20

+1

您可能能够使用另一个linq查询来转发数据:http://stackoverflow.com/questions/167304/is-it-possible-to-pivot-data-using-linq – jmaglio 2012-03-06 16:25:07

回答

1

您需要使用GROUP BY汇总结果。这应该工作:

Dim grouped = 
    From usersAnswers In 
     From result In results 
     Group result By result.userID Into Group 
     Let answers = Group.OrderBy(Function(x) x.QuestionText).ToList() 
     Select 
      answers.First().firstName, 
      Question1 = answers(0).UserResponse, 
      Question2 = answers(1).UserResponse, 
      Question3 = answers(2).UserResponse